本次任务很简单,数码管用于动态显示,三个按键的作用为:第一个按键为模式按键,第一次按下时千位的数码管闪烁;第二次按下时百位的数码管闪烁,同时千位不再闪烁;第三次按下时十位的数码管闪烁,同时百位不再闪烁;依此类推。
第二个按键为加1按键,当某位闪烁时按此按键则加1,到10时复为0。
第三个按键为减1按键,作用同上。
现在我的程序已经写出来了,也能实现功能。但总觉得别扭。没有可读性,不能拓展。现贴出代码及工程打包,希望各位能指点下
- #include <reg51.h>
- #include <intrins.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit wei1=P2^0;
- sbit wei2=P2^1;
- sbit wei3=P2^2;
- sbit wei4=P2^3;
- uchar code tab[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
- uchar num[4]= {1,2,3,4};
- uchar disp[4];
- uchar dida1ms;
- uint dida1ms2;
- uchar Trag,Cont;
- void InitT0()
- {
- TH0=0Xfc;
- TL0=0X18;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void Getkey()
- {
- uchar ReadData;
- ReadData=P3^0XFF;
- Trag=ReadData&(Cont^ReadData);
- Cont=ReadData;
- }
- void main(void)
- {
- uchar moshi=0;
- InitT0();
- disp[0]=num[0];
- disp[1]=num[1];
- disp[2]=num[2];
- disp[3]=num[3];
- while (1)
- {
- if(dida1ms==50)
- {
- wei1=1;
- wei2=0;
- P0=tab[disp[1]];
- }
- else if(dida1ms==100)
- {
- wei2=1;
- wei3=0;
- P0=tab[disp[2]];
- }
- else if(dida1ms==150)
- {
- wei3=1;
- wei4=0;
- P0=tab[disp[3]];
- }
- else if(dida1ms==200)
- {
- dida1ms=0;
- wei4=1;
- wei1=0;
- P0=tab[disp[0]];
- }
- Getkey();
- if(Trag&1)
- {
- moshi++;
- }
- if(moshi==5)
- {
- moshi=0;
- }
- if(moshi!=0)
- {
- if(Trag&2)
- {
- num[moshi-1]++;
- }
- if(num[moshi-1]==10)
- {
- num[moshi-1]=0;
- }
- if(Trag&4)
- {
- num[moshi-1]--;
- }
- if(num[moshi-1]==255)
- {
- num[moshi-1]=9;
- }
- if(moshi!=1)
- {
- disp[moshi-2]=num[moshi-2];
- }
- if(dida1ms2==2000)
- {
- disp[moshi-1]=num[moshi-1];
- }
- else if(dida1ms2>=4000)
- {
- disp[moshi-1]=10;
- dida1ms2=0;
- }
- }
- else
- {
- disp[3]=num[3];
- }
- }
- }
- void T0ser() interrupt 1
- {
- TH0=0Xfc;
- TL0=0X18;
- dida1ms++;
- dida1ms2++;
- }
|