标题: 十字路口交通灯单片机设计报告【代码+Proteus仿真】 [打印本页]
作者: diudiu 时间: 2013-6-26 16:16
标题: 十字路口交通灯单片机设计报告【代码+Proteus仿真】
51hei论坛是我见过的最好的单片机论坛,资料很多,回复也及时,我今天也发几个自己的作品,交通灯设置 全套资料
希望大家多多支持51hei.
仿真文件和源代码下载:
C51代码 Proteus原理图 .rar
(22.57 KB, 下载次数: 1700)
设计报告下载:http://www.51hei.com/f/单片机课程设计报告-十字路口交通灯控制.pdf
作者: diudiu 时间: 2013-6-26 16:16
#include<reg51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={ //共阴极数码管码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xC9,0xFF,0x40};//设置码,测试码,不计时码
void delay(uint x);//延时函数
void display(uchar,uchar,uchar,uchar); //数码管显示函数
void mkeys(); //键盘函数
void traffic(); //交通灯函数
uchar num,num1,num2, //1南北 2东西
shi1,ge1,shi2,ge2,
value1,value2,//南北 绿灯时间 黄灯时间
value3,value4,//东西 绿灯时间 黄灯时间
count1,count2,flag1,flag2; //南北标记 东西标记
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
/*初状态*/
value1=15; //南北 黄绿灯默认值
value2=5;
value3=10; //东西 黄绿灯默认值
value4=5;
num1=value1; //南北数码管先绿灯时间
num2=value2+value1;//东西红灯时间
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
P1=0x41;//初始状态:东西红灯 南北绿灯 20 15
while(1){
if(num==20) //定时器1s
{
num=0;
num1--;
num2--;
traffic();
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
}
mkeys();
display(shi1,ge1,shi2,ge2);
}
}
void traffic() //红绿灯主控制程序
{
if(num1==0){
count1++;
if(count1==1){
P1=0x42;//东西红灯 南北黄灯 5 5
num1=value2;
}
if(count1==2){
num1=value3+value4;//东西绿灯 南北红灯 10 15
P1=0x14;
}
if(count1==3){
P1=0x41;// 东西黄灯 南北红灯 5 5
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; //东西红灯 南北绿灯
num1=value1;
count2=0;
}
}
}
void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2) //数码管显示子函数
{
uchar temp;
temp=P2;
P2=0xfe;
P0=table[shi1];
delay(5);
P2=0xfd;
P0=table[ge1];
delay(5);
P2=0xfb;
P0=table[shi2];
delay(5);
P2=0xf7;
P0=table[ge2];
delay(5);
}
void delay(uint x)//延时子函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void mkeys() //4*4矩阵键盘功能子函数
{
uchar temp,key;
P3=0xfe;//第一行线
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0){
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
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:设置完成 重启
TR0=1;
num=0; //定时器 初始化
P1=0x41; //重新开始初状态
num1=value1; //南北数码管先绿灯时间
num2=value2+value1;//东西红灯时间
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
}
if(key==3&&P1==0x44){ //按键4:测试交通灯各个设备的好坏
P1=0xff;
delay(1000);
P1=~P1;
shi1=ge1=shi2=ge2=17;
P1=0x44;
}
}
}
P3=0xfd;//第二行线
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0){
temp=P3;
switch(temp)
{
case 0xed:
key=0;
break;
case 0xdd:
key=1;
break;
case 0xbd:
key=2;
break;
case 0x7d:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44){ //按键5:设置南北绿灯时间+
num1=value1;
if(num2!=159){ //@@@@保证交通合理,红灯最大值计时159s,绿灯不再增加
num1++;
value1=num1;
}
shi1=num1/10;
ge1=num1%10;
num2=value1+value2;//显示东西红灯时间
shi2=num2/10;
ge2=num2%10;
}
if(key==1&&P1==0x44){ //按键6:设置南北黄灯时间+
num1=value2;
if(num2!=159){
num1++;
value2=num1;
}
shi1=num1/10;
ge1=num1%10;
num2=value1+value2;//显示东西红灯时间
shi2=num2/10;
ge2=num2%10;
}
if(key==2&&P1==0x44&&value1>3){ //按键7:设置南北绿灯时间- @@@@保证交通合理,绿灯最小值计时3s,绿灯不再减少
num1=value1;
num1--;
value1=num1;
shi1=num1/10;
ge1=num1%10;
num2=value1+value2;//显示东西红灯时间
shi2=num2/10;
ge2=num2%10;
}
if(key==3&&P1==0x44&&value2>3){ //按键8:设置南北黄灯时间-
num1=value2;
num1--;
value2=num1;
shi1=num1/10;
ge1=num1%10;
num2=value1+value2;//显示东西红灯时间
shi2=num2/10;
ge2=num2%10;
}
}
}
////||||||||||||||||||
P3=0xfb;//第三行线
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0){
temp=P3;
switch(temp)
{
case 0xeb:
key=0;
break;
case 0xdb:
key=1;
break;
case 0xbb:
key=2;
break;
case 0x7b:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44){ //按键9:设置东西绿灯时间+
num2=value3;
if(num1!=159){
num2++;
value3=num2;
}
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;//显示南北红灯时间
shi1=num1/10;
ge1=num1%10;
}
if(key==1&&P1==0x44){ //按键10:设置东西黄灯时间+
num2=value4;
if(num1!=159){
num2++;
value4=num2;
}
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;//显示南北红灯时间
shi1=num1/10;
ge1=num1%10;
}
if(key==2&&P1==0x44&&value3>3){ //按键11:设置东西绿灯时间-
num2=value3;
num2--;
value3=num2;
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;//显示南北红灯时间
shi1=num1/10;
ge1=num1%10;
}
if(key==3&&P1==0x44&&value4>3){ //按键12:设置东西黄灯时间-
num2=value4;
num2--;
value4=num2;
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;//显示南北红灯时间
shi1=num1/10;
ge1=num1%10;
}
}
}
P3=0xf7;//第四行线 2未用
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0){
temp=P3;
switch(temp)
{
case 0xe7:
key=0;
break;
case 0xd7:
key=1;
break;
case 0xb7:
key=2;
break;
case 0x77:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44){ //按键13:南北紧急情况:南北绿灯常亮 东西红灯常亮
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==1&&P1==0x44){ //按键14:东西紧急情况:东西绿灯常亮 南北红灯常亮
P1=0x14;
shi1=ge1=shi2=ge2=18;
}
if(key==2&&P1==0x44){//按键15:
}
if(key==3&&P1==0x44){//按键16:
}
}
}
}
void T0_time() interrupt 1 //定时器T0 中断子程序
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}
作者: 八戒调皮 时间: 2013-7-1 18:59
挺好好的
作者: 冰蓝色de激情 时间: 2013-7-3 16:36
谢谢谢谢谢谢谢谢谢谢
作者: 李强 时间: 2013-7-21 19:28
好好学习啊
作者: 的爱我 时间: 2013-12-18 11:46
你妹,程序错那么多
作者: 942770740 时间: 2013-12-26 22:47
顶
作者: GZMNGZS 时间: 2013-12-31 15:47
{:soso_e179:}{:soso_e102:}
作者: y5201314 时间: 2014-4-1 23:50
怎一个霸气了得,谢谢分享!
作者: ya123chiang 时间: 2014-5-6 08:40
謝......................


作者: delux3344 时间: 2014-5-13 13:25
好好学习啊
作者: omegaxzeroaxl 时间: 2014-5-28 08:22
感謝大大分享 最近需要!
作者: omegaxzeroaxl 时间: 2014-5-28 08:22
在次謝謝大大!
作者: busuzhike 时间: 2014-5-28 15:45
nice!!
作者: woahaookc 时间: 2014-6-6 23:49
adaskkdklas
作者: 疯幸紫 时间: 2014-6-12 00:11
谢谢分享!
作者: 疯幸紫 时间: 2014-6-12 08:06
有汇编吗?
作者: 灬飞翔的巧克力 时间: 2014-9-26 20:28
厉害!
作者: 唉丶芒果 时间: 2014-10-15 13:20
这个好用吗
作者: 唉丶芒果 时间: 2014-10-15 16:15
可以使用麽
作者: ismail 时间: 2014-12-29 22:06
正是我需要的
作者: ws85246 时间: 2015-1-13 15:56
学习参考一下
作者: goray2015 时间: 2015-2-19 20:47
程序调试过了吗?
作者: goray2015 时间: 2015-2-19 20:48
感谢!
作者: ismail 时间: 2015-3-25 18:17
有汇编语言的程序吗?
作者: 幸福的王铁柱 时间: 2015-4-16 16:36
这个不错啊,学习了,谢谢分享
作者: 51hei论坛 时间: 2015-4-19 22:11
bucuoo
作者: 1178294203 时间: 2015-4-20 10:47
谢谢了
作者: 一双滑板鞋 时间: 2015-5-7 21:37
谢谢分享
作者: a_fei 时间: 2015-5-10 14:45



作者: 水生 时间: 2015-5-10 23:09
谢谢楼主慷慨分享
作者: yyyyooo 时间: 2015-5-11 12:39
谢谢,分享了
作者: 哎呀蜈蚣 时间: 2015-5-13 15:26
期待能够多看看,不错挺好的 支持
作者: 众生作废 时间: 2015-5-14 20:29
可以使用麽
作者: 陈志扬 时间: 2015-5-17 09:04
good
作者: 双人旅途 时间: 2015-5-29 14:05
51hei 有你更精彩!!
作者: 双人旅途 时间: 2015-5-29 14:05
51hei 有你更精彩!!
作者: 双人旅途 时间: 2015-5-29 14:05
51hei 有你更精彩!!
作者: 单纯的负担 时间: 2015-6-17 17:07
数码管不亮,没用啊
作者: constanly 时间: 2015-6-24 14:19
车流量动态的话如何设计
作者: 532415834 时间: 2015-6-24 14:59
赞赞赞
作者: 727802492 时间: 2015-8-17 18:00
在次謝謝大大!
作者: 476386434 时间: 2015-9-8 10:52
haodongxi
作者: sunrise_ 时间: 2015-10-22 11:00
下下来看看,学习一下
作者: sunrise_ 时间: 2015-10-22 11:51
学习一下大神的作品
作者: 平心静气 时间: 2015-11-18 14:38
我想说 .hex 文件怎么搞啊 为什么是.才。。
作者: 平心静气 时间: 2015-11-18 15:07
看了一下 教程 原来还要keil 那个软件 醉醉的。。
作者: 平心静气 时间: 2015-11-19 15:27
南北紧急和东西紧急 两个按钮 都是南北绿灯常亮啊。。。。有问题
作者: 平心静气 时间: 2015-11-19 15:29
原来每次调整都要 点一下设置 。。
作者: 平心静气 时间: 2015-11-20 14:33
大大 能不能提供一下 元器件清单啊 我想做个实物~
作者: 符点小圣龙 时间: 2015-11-30 19:53
可以可以
作者: sincoo 时间: 2015-12-8 15:36
好用。
作者: 貌似注册过 时间: 2015-12-22 18:01
楼主好人
作者: vhff 时间: 2015-12-28 16:09
如果我需要修改时间,该怎么办?
作者: a411301001 时间: 2015-12-28 20:21
期待能够多看看,不错挺好的 支持
作者: An-Xinz 时间: 2016-1-12 10:08
多谢楼主
作者: love_gavin 时间: 2016-4-26 17:42
不错顶一个
作者: liyuehuan 时间: 2016-4-27 19:36
这个真的很不错了,多谢了。
作者: ghfh2012 时间: 2016-4-29 15:03
在次謝謝大大!




作者: 莫丶小七 时间: 2016-5-9 17:29
不错 顶
作者: haoshijie 时间: 2016-5-12 00:59
程序真多啊!
作者: killynote 时间: 2016-5-20 22:34
挺好好的
作者: 浅暗 时间: 2016-5-21 14:58
666
作者: 568441 时间: 2016-5-24 09:30
eeeedddwqdqwdwq
作者: virus1993 时间: 2016-6-7 10:55
感谢!
作者: fuliang 时间: 2016-6-8 10:16
非常感谢楼主!!!!
作者: 852852852 时间: 2016-6-8 10:29
大神,信号灯找不到啊
作者: tcc1361001843 时间: 2016-6-14 19:05
这个可以的
作者: zimuren 时间: 2016-6-17 15:29
谢谢,正在找这个
作者: 上树福吉 时间: 2016-6-30 00:39
谢谢,非常好用
作者: lemonack 时间: 2016-6-30 06:45
期待能够多看看,不错挺好的 支持
作者: wdsaffdsa 时间: 2016-7-2 12:33
bucuo cankaocankao
作者: 在路上adc 时间: 2016-10-30 18:32
很不错,学学(●'◡'●)
作者: liwenqi 时间: 2016-11-7 16:49
请问楼主有汇编语言的代码吗?
作者: jgljgkf 时间: 2016-11-9 12:13
感谢分享,不过程序没调试吧
作者: 一个好学生 时间: 2016-11-10 15:41
这个可以去掉4个显示屏 然后用红绿LED代替的吧
作者: 海风chuan 时间: 2016-11-20 21:43
运行不了啊
作者: wzh4562 时间: 2016-11-22 12:55
楼主给力
作者: wzh4562 时间: 2016-11-22 12:56
楼主给力啊啊
作者: Alice 时间: 2016-11-22 13:08
厉害了我的哥
作者: ttbjfree 时间: 2016-12-5 15:02
支持一下
作者: qq1158078864 时间: 2017-1-1 13:21
很好用
作者: 大捣蛋鬼 时间: 2017-1-1 21:51
不一样
作者: study123456789 时间: 2017-2-8 16:52
很给力
作者: study123456789 时间: 2017-2-8 16:52
很给力
作者: study123456789 时间: 2017-2-8 16:53
感谢楼主分享
作者: qwertasdfg 时间: 2017-2-9 09:17
大家都能看的懂吗 赞的一头劲 我怎么看到有好多错误
作者: 冠希哥哥哥 时间: 2017-3-31 11:24
楼主能分享一下嘛 我的QQ邮箱yao756987613@qq.com 十分感谢楼主大神
作者: 王者MS 时间: 2017-4-25 20:49
设计报告下载不了,被筛选器过滤了。好头疼
作者: 离别—— 时间: 2017-5-3 20:23
不错很好啊
作者: xqw111 时间: 2017-5-10 16:05
很给力!
作者: Zlover 时间: 2017-5-20 17:56
谢谢分享!
作者: 蕾蕾11 时间: 2017-6-5 13:31
赞一个
作者: kllkllkll 时间: 2017-6-6 15:16
想问一下 为什么没有用573锁存器?
作者: 翻翻翻 时间: 2017-6-8 19:59
我想下载这个资料,可是好像下载不了T-T
作者: sfd123 时间: 2017-6-16 11:31
谢谢分享!
作者: 1102396223 时间: 2017-6-16 12:16
很好的资料,给楼主点个赞
作者: nliang 时间: 2017-6-20 16:21
不错,支持下
作者: 芒芒芒芒果 时间: 2017-6-21 16:07
为啥 我最后显示的和你的不一样
作者: 天圆地方 时间: 2017-6-22 09:15
很赞,加油!!!
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |