keil 中变态的c语言问题-急!:
此程序是一个键盘扫描,数码管移位显示的c语言程序,用的是89s52的单片机;思路大概就是:将键盘扫描到的数值在数码管上移位显示,就像平常的计算器那样输入,最新输入的数据始终显示在最右端,第一次键盘输入的数据显示在数码管最左端……然后依次。
#include<regx52.h>
#include<keyscan.h>//键盘扫描子程序
#define uint unsigned int
#define uchar unsigned char
uchar i=0;uchar j;
uchar code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//段码,共阳型,0-9,a-f
uchar code scan[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选,分别选择从右到左的数码管
uchar counter[8];//记录8位数码管每位的值
void main()
{
uchar n=0;
while(1)
{
n=0;
n=keyscan();
/* for(j=6;j>=0;j--)
counter[j+1]=counter[j]; */ //用此for语句代替下面的几条移位语句不能显示,用以下的则能显示。此,问题1
if(n%17) //如果键盘有输入,则移位一次。键盘子程序返回1-16,可是这句好像没起什么作用,按键一次其内的语句就无限次的执行,以至8位数码管显示的都是一个数值
{//此,问题2
counter[7]=counter[6];
counter[6]=counter[5];
counter[5]=counter[4];
counter[4]=counter[3];
counter[3]=counter[2];
counter[2]=counter[1];
counter[1]=counter[0];
counter[0]=n-1;
}
P0=seg[counter];
P3=scan;
i++;
if(i==8) i=0;
}
}