单片机课程设计红绿灯Word下载.docx
- 文档编号:14681228
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:22
- 大小:580.44KB
单片机课程设计红绿灯Word下载.docx
《单片机课程设计红绿灯Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计红绿灯Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
3.2紧急中断流程图
3.3设计程序及说明
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]={//共阴极数码管码表1-F
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xC9,0xFF,0x40};
//设置码,测试码,不计时码
voiddelay(uintx);
//延时函数
voiddisplay(uchar,uchar,uchar,uchar);
//数码管显示函数
voidmkeys();
//键盘函数
voidtraffic();
//交通灯函数
ucharnum,num1,num2,//1南北2东西
shi1,ge1,shi2,ge2,
value1,value2,//南北绿灯时间黄灯时间
value3,value4,//东西绿灯时间黄灯时间
count1,count2,flag1,flag2;
//南北标记东西标记
voidmain()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
/*初状态*/
value1=60;
//南北黄绿灯默认值
value2=3;
value3=80;
//东西黄绿灯默认值
value4=3;
num1=value1;
//南北数码管先绿灯时间
num2=value2+value1;
//东西红灯时间
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
P1=0x41;
//初始状态:
东西红灯南北绿灯
while
(1){
if(num==20)//定时器1s
{
num=0;
num1--;
num2--;
traffic();
}mkeys();
//扫描按键
display(shi1,ge1,shi2,ge2);
//调用数码管显示函数
}
}
voidtraffic()//红绿灯主控制程序
if(num1==0){
count1++;
if(count1==1){
P1=0x42;
//东西红灯南北黄灯
num1=value2;
if(count1==2){
num1=value3+value4;
//东西绿灯南北红灯
P1=0x14;
if(count1==3){
//东西黄灯南北红灯
num1=value4;
count1=0;
if(num2==0){
count2++;
if(count2==1){
//P1=0x14;
num2=value3;
if(count2==2){
P1=0x24;
//东西黄灯南北红灯
num2=value4;
if(count2==3){
num2=value1+value2;
//东西红灯南北绿灯
count2=0;
voiddisplay(ucharshi1,ucharge1,ucharshi2,ucharge2)//数码管显示子函数
uchartemp;
temp=P2;
P2=0xfe;
P0=table[shi1];
delay(5);
P2=0xfd;
P0=table[ge1];
P2=0xfb;
P0=table[shi2];
P2=0xf7;
P0=table[ge2];
voiddelay(uintx)//延时子函数
uinti,j;
for(i=x;
i>
0;
i--)
for(j=110;
j>
j--);
voidmkeys()//4*4矩阵键盘功能子函数
uchartemp,key;
P3=0xfe;
//第一行线
temp=P3;
temp=temp&
0xf0;
if(temp!
=0xf0)
delay(10);
=0xf0){
switch(temp)
case0xee:
key=0;
break;
case0xde:
key=1;
case0xbe:
key=2;
case0x7e:
key=3;
while(temp!
if(key==0){//按键1:
暂停
TR0=~TR0;
//定时器取反
flag1=~flag1;
//南北能够设置标志0有效
flag2=~flag2;
//东西能够设置标志
if(key==1&
&
flag1==0){//按键2:
设置时间按钮
TR0=0;
P1=0x44;
//禁止东南西北车辆全为红灯可以设置
shi1=ge1=shi2=ge2=16;
if(key==2&
flag2==0){//按键3:
设置完成重启
//定时器初始化
//重新开始初状态
if(key==3&
P1==0x44){//按键4:
测试交通灯各个设备的好坏
P1=0xff;
delay(1000);
P1=~P1;
shi1=ge1=shi2=ge2=17;
P3=0xfd;
//第二行线
case0xed:
case0xdd:
case0xbd:
case0x7d:
if(key==0&
P1==0x44){//按键5:
设置南北绿灯时间+
if(num2!
=159){//@@@@保证交通合理,红灯最大值计时159s,绿灯不再增加
num1++;
value1=num1;
//显示东西红灯时间
P1==0x44){//按键6:
设置南北黄灯时间+
=159){
value2=num1;
P1==0x44&
value1>
3){//按键7:
设置南北绿灯时间-@@@@保证交通合理,绿灯最小值计时3s,绿灯不再减少
value2>
3){//按键8:
设置南北黄灯时间-
P3=0xfb;
//第三行线
case0xeb:
case0xdb:
case0xbb:
case0x7b:
while
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 红绿灯