单片机实验实现以下功能:单灯亮灭流水灯,所有的灯逐个亮和灭;两灯亮灭流水灯;单灯逐一亮后再灭;对流水灯的作业进行计时,以上每行的运行时间为1s,并把计时的结果用四段数码管显示,求程序代码!
有没有图片呢 这样看有点不明白 端口的定义什么的 最好是protuse的仿真截图 谢谢
额,程序之前没仿真过,有点错误,现在可以了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned a=0,b=0,counter=0;
unsigned char SEG1[ ] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char SEG2[ ] = {0x03,0x06,0x0C,0x18,0x30,0x60,0x0C,0x81};
unsigned char SEG3[ ] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char SEG4[ ] = {0x01,0x02,0x04,0x08,0x30,0x60,0x0C,0x81};
sbit P31 = P3^1;
sbit P30 = P3^0;
void Timer0Init(void) interrupt 3 //定时器1
{
counter++;
if(counter==2000) //定时器定时250us,故4000次中断就表示1秒钟到达
{
counter=0;
a++;
b++;
if(a==8) a=0;
if(b==256)b=0;
EA=1;
}
}
void init()
{
TMOD = 0x20;
EA=1;
TH1=6;
TL1=6;
TR1=1;
ET1=1;
}
void disp()
{
if (P30==0&&P31==0) {P1 = SEG1 [a];}
if (P30==1&&P31==0) {P1 = SEG2 [a];}
if (P30==0&&P31==1) {P1 = SEG3 [a];}
if (P30==1&&P31==1) {P1 = SEG4 [a];}
P2=b;
}
main()
{
init();
while(1)
{
disp();
}
}