/***片選***/
unsigned char code Select[]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/***碼選***/
unsigned char code LED_CODES[]=
{0xC0,0xF9,0xA4,0xB0,0x99,
//0-4
0x92,0x82,0xF8,0x80,0x90, //5-9
0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,。,-
/***main函數(shù)***/
void main(void) {
char i,j,k,c;
char a[8],b[8];
/***定時(shí)1ms***/
TMOD=0;
TL0=-(1000/256);
TH0=-(1000%256);
EA = 1; //總中斷開關(guān)
ET0 = 1; //開中斷
TR0 = 1; //啟用計(jì)數(shù)器0
KSC:do {
for(i=1;i《9;i++) //數(shù)字錄入循環(huán) {
dsp[0]=keyscan();
if(c==2&&dsp[0]《10)
//此段代碼驗(yàn)證是否有舊的計(jì)算結(jié)果在顯示,且不
再參與新計(jì)算
{
dsp[1]=dsp[0];
for(j=2;j《9;j++)
dsp[j]=12;
c=0;
}
else if(c==2&&dsp[0]》9) //舊的計(jì)算結(jié)果將參與新的計(jì)算,作為第一個(gè)數(shù)
{ c=0; }
if(dsp[0]==0&&dsp[1]==0&&dsp[2]==12) //個(gè)位為0且十位為空時(shí)按下0,按鍵無
效,跳回KSC等待正確輸入 {
/***goto跳轉(zhuǎn)標(biāo)志***/ goto KSC;
}
else if(dsp[0]》9) break; //有操作符按下,跳出數(shù)字錄入循環(huán)
else
{
for(j=i;j》0;j--)
dsp[j]=dsp[j-1]; //移位,以正確顯示數(shù)字 }
}
if(i==9) //判斷是否輸入8個(gè)有效數(shù)字,是則等待操作符,否則直接判斷操作符 {
do //使用do while無論是否第一個(gè)數(shù)都取一次操作符 {
dsp[0]=keyscan();
//獲取操作符號(hào)
if(dsp[0]==14||dsp[0]《10) //按下C或者第9位數(shù)字清零
{
單片機(jī)系統(tǒng)開發(fā)與應(yīng)用工程實(shí)習(xí)計(jì)報(bào)告
7
dsp[1]=0;
for(i=2;i《9;i++)
dsp[i]=12; c=0;
}
}
while((dsp[0]==15)&&(c==0));
//等號(hào)被按下,等待新的操作符(僅對
第一個(gè)數(shù)字有效)
}
else if(dsp[0]==14) //按下C清零
{
dsp[1]=0;
for(i=2;i《9;i++)
dsp[i]=12;
c=0;
}
while(dsp[0]==15&&c==0)
//未輸滿8位且是第一個(gè)數(shù)字即按下等號(hào),等
待非等號(hào)操作符 {
dsp[0]=keyscan();
//獲取操作符號(hào)
if(dsp[0]==14||dsp[0]《10) //按下C或者數(shù)字都進(jìn)行清零,重新輸入a
{
dsp[0]=14; //將dsp[0]置為14,防止因數(shù)字清零未能攔截
dsp[1]=0;
for(i=2;i《9;i++)
dsp[i]=12;
c=0;
}
}
}while(dsp[0]==14); //數(shù)字輸入未完成即按下C,重新等待輸入
do
{
if(c==0) //沒有數(shù)字輸入 { k=dsp[0];
//存計(jì)算符(循環(huán)內(nèi)已排除C、=、數(shù)字)
for(i=0;i《8;i++) //將第一個(gè)數(shù)存入a[8] {
a[i]=dsp[i+1];
}
評(píng)論