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;
}
}