#include<reg51.h>
#define uchar unsigned char
uchar count,second,i,flag;
sbit h_red=P2^1;
sbit h_green=P2^2;
sbit h_yellow=P2^3;
sbit l_red=P2^4;
sbit l_green=P2^5;
sbit l_yellow=P2^6;
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main()
{
P1=0x00;
P3=0x00;
flag=1;
second=20;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
TR0=1;
IE=0x82;
while(1);
}
void state1(void)
{
h_red=1;
h_green=0;
h_yellow=0;
l_red=0;
l_green=1;
l_yellow=0;
}
void state2(void)
{
h_red=1;
h_green=0;
h_yellow=0;
l_red=0;
l_green=0;
l_yellow=0;
}
void state3(void)
{
h_red=1;
h_green=0;
h_yellow=0;
l_red=0;
l_green=0;
l_yellow=1;
}
void state4(void)
{
h_red=0;
h_green=1;
h_yellow=0;
l_red=1;
l_green=0;
l_yellow=0;
}
void state5(void)
{
h_red=0;
h_green=0;
h_yellow=0;
l_red=1;
l_green=0;
l_yellow=0;
}
void state6(void)
{
h_red=0;
h_green=0;
h_yellow=1;
l_red=1;
l_green=0;
l_yellow=0;
}
void int_0()interrupt 1 using 0
{
count ++;
TH0=0x3C;
TL0=0xB0;
switch(flag)
{
case 1:
{
state1();
if(count==20)
{
count=0;
if(second>0)
{
P1=table[second/10];
P3=table[second%10];
second--;
}
else
{
P1=0x3F;
P3=0x3F;
second=3;
flag=2;
}
}
}break;
case 2:
{
state2();
if(count>=10)
{
count=0;
l_green=~l_green;
i++;
if(i==2)
{
i=0;
if(second>0)
{
P3=table[second%10];
P1=table[second/10];
second--;
}
else
{
P1=0x3F;
P3=0x3F;
second=2;
flag=3;
i=0;
}
}
}
}break;
case 3:
{
state3();
if(count>=10)
{
count=0;
l_yellow=~l_yellow;
i++;
if(i==2)
{
i=0;
if(second>0)
{
P3=table[second%10];
P1=table[second/10];
second--;
}
else
{
P1=0x3F;
P3=0x3F;
second=20;
flag=4;
i=0;
}
}
}
}break;
case 4:
{
state4();
if(count==20)
{
count=0;
if(second>0)
{
P1=table[second/10];
P3=table[second%10];
second--;
}
else
{
P1=0x3F;
P3=0x3F;
second=3;
flag=5;
}
}
}break;
case 5:
{
state5();
if(count>=10)
{
count=0;
i++;
h_green=~h_green;
if(i==2)
{
i=0;
P1=table[second/10];
P3=table[second%10];
second--;
}
if(second==0)
{
P1=0x3F;
P3=0x3F;
second=2;
flag=6;
i=0;
}
}
}break;
case 6:
{
state6();
if(count>=10)
{
count=0;
i++;
h_yellow=~h_yellow;
if(i==2)
{
i=0;
if(second>0)
{
P3=table[second%10];
P1=table[second/10];
second--;
}
else
{
P1=0x3F;
P3=0x3F;
second=20;
flag=1;
i=0;
}
}
}
}break;
default:break;}
}
你没图,不知怎么画的。
试了,不会全亮。
追问谢谢 我在p2口输出的时候加了非门,发光二级管用的是共阳极,其他的和你的一样,求指教下为什么仿真的时候灯全亮呢?
追答你的图上来看看
追问
你的proteus软件有问题?
我也不知道 仿真老师的东西也没问题啊,就是做这个的时候会这样?谢谢了,能加你QQ 吗?以后有问题好请教你。
追答578743933
单片机实训总结范文5篇
本次单片机实习我们一共完成了个模块的程序设计,包括:led显示模块、数码管显示模块和键盘模块。分别实现了流水灯的循环点亮控制、数码管的静态和动态计数显示,还有矩阵键盘按键控制数码管显示的程序设计。然后我们分别用protues系统仿真软件对各个模块进行了模拟仿真,用keil软件编制了汇编语言程序,验证了我们所设计的程序。