您的位置 首页 知识

MC-51单片机红绿灯+数码管计时试验

单片机实验主机板的P1接口平接显示板P00接口即数码管段选接口主机板的P3接口平接显示板P20接口即数码管位选接口主机板的

单片机试验

//主机板的P1接口 平接 显现板P00接口 即数码管段选接口
//主机板的P3接口 平接 显现板P20接口 即数码管位选接口
//主机板的P0接口 平接 显现板灯的接口

#include
unsigned char time[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int n = 2000;//每半秒中止一次

bit change=1;
bit Shan=1;//闪

//界说显现管为位选特别位
sbit A=P3^7;
sbit B1=P3^6;
sbit C=P3^5;
sbit G1=P3^4;
sbit daul = P3^3;

ZY();//左右通行
SX();//上下通行
ZYS();//左右绿灯闪
SXS();//上下绿灯闪

lock();
delay();

//一下界说使灯亮的特别位
sbit ZL=P0^0;
sbit ZH=P0^1;
sbit SH=P0^2;
sbit SL=P0^3;
sbit YH=P0^4;
sbit YL=P0^5;
sbit XH=P0^6;
sbit XL=P0^7;
//
unsigned char rl=70;
unsigned char ud=45;
unsigned int working=0;//
unsigned char num;

main()
{
TMOD=2;//设置守时/计数器0工作方式2
TH0=6;//初值为6,守时4000
TL0=6;//初值为6
TR0=1;
ET0=1;
EA=1;
working = rl*2;

while(1){
if(change==1&&Shan==1){//
ZY();
}else if(change==1&&Shan==0){
ZYS();
}else if(change==0&&Shan==1){
SX();
}else if(change==0&&Shan==0){
SXS();
}

num=working/2;

P1=time[num];
daul=1;
A=1;B1=1;C=1;
G1=1;
delay();
lock();

P1=time[num/10];
daul=1;
A=0;B1=1;C=1;
G1=1;
delay();
lock();

}

//
}

//中止程序

T0_int() interrupt 1{
n–;
if(n==0){
if(working!=0&&change==1){
if(working<=4){//最终两秒闪
Shan=!Shan;
}
working–;
n=2000;
}else if(working==0&&change==1){
change=!change;
working = ud*2;
n=2000;
}else if(working!=0&&change==0){
if(working<=6){//最终3秒闪
Shan=!Shan;
}
working–;
n=2000;
}else if(working==0&&change==0){
change=!change;
working = rl*2;
n=2000;
}
}
}

ZY(){//左右绿灯亮,上下红灯亮
YL=0;//右绿
ZL=0;//左绿
SH=0;//上红
XH=0;//下红
//
ZH=1;
YH=1;
SL=1;
XL=1;
}

SX(){//上下绿灯亮,左右红灯亮
YL=1;//
ZL=1;
SH=1;
XH=1;
//
ZH=0;
YH=0;
SL=0;
XL=0;
}

ZYS(){//左右绿灯闪耀
YL=1;
ZL=1;
SH=0;
XH=0;
//
ZH=1;
YH=1;
SL=1;
XL=1;
}

SXS(){//上下绿灯闪耀
YL=1;//
ZL=1;
SH=1;
XH=1;
//
ZH=0;
YH=0;
SL=1;
XL=1;
}

lock(){
daul=0;
G1=0;
}

delay(){
int i=40;
while(i>0){
i–;
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/259955.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部