本次任务很简单,数码管用于动态显示,三个按键的作用为:第一个按键为模式按键,第一次按下时千位的数码管闪烁;第二次按下时百位的数码管闪烁,同时千位不再闪烁;第三次按下时十位的数码管闪烁,同时百位不再闪烁;依此类推。
第二个按键为加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++;
}
按键加数码管显示.rar
(39.46 KB)
|