基于单片机STC89C52RC的交通灯.doc

上传人:仙人指路1688 文档编号:4148387 上传时间:2023-04-07 格式:DOC 页数:13 大小:38.50KB
返回 下载 相关 举报
基于单片机STC89C52RC的交通灯.doc_第1页
第1页 / 共13页
基于单片机STC89C52RC的交通灯.doc_第2页
第2页 / 共13页
基于单片机STC89C52RC的交通灯.doc_第3页
第3页 / 共13页
基于单片机STC89C52RC的交通灯.doc_第4页
第4页 / 共13页
基于单片机STC89C52RC的交通灯.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《基于单片机STC89C52RC的交通灯.doc》由会员分享,可在线阅读,更多相关《基于单片机STC89C52RC的交通灯.doc(13页珍藏版)》请在三一办公上搜索。

1、基于单片机STC89C52RC的交通灯摘要:本交通灯系统采用STC89C52RC作为核心控制器,控制红绿黄三盏灯,来达到模拟日常交通灯系统,其中倒计时时间通过1602显示出来。关键词:交通灯 1602液晶一、 设计方案整个模拟交通灯系统用单片机STC89C52RC作为核心控制器,有序的控制着红黄绿三盏灯的运行,实际交通灯系统所需的倒计时时间采用1602显示出来,并且其倒计时时间可通过独立式键盘进行调整。STC89C52红黄绿LED1602液晶独立式键盘 系统框图二、 主程序流程图开始系统初始化 等待中断 N 按键是否按下? Y调用按键处理函数 返回三、 附录-源程序(C)一、the main

2、function of this system /*用stc52实现简易交通灯*/#include#include#include define.h#include lcd_1602.h#include delay.h#include some_inits.h#include control.h/*主函数void main()*/void main()sys_init();while(1)key_scan();/扫描键盘delay_ms(100);二、include Some .h files(1)defines.h#ifndef _define_h#define _define_h#defi

3、ne uchar unsigned char#define unint unsigned int/*液晶数据区*/sfrlcd_bus=0x80;/液晶数据口sbit E=P27;sbitRW=P26;sbitRS=P25;/*定义三盏led*/sbitred=P20;sbitgreen=P21;sbityellow=P22;/*定义三个开关*/sbitjia=P10; /加一键sbitjian=P11;/减一键sbitok=P12;/确认键ucharflag=1;/1,2,3:绿灯,黄灯,红灯bitfirst=0;/*蜂鸣器*/sbitbell=P14;ucharsec_h;/秒针十位uch

4、arsec_l;/秒针个位uchar g_h=1,g_l=0;/绿灯计时数据uchary_h=1,y_l=0;/黄灯计时数据ucharr_h=1,r_l=0;/红灯计时数据#endif(2)some_inits.h#ifndef_some_inits_h#define_some_inits_h#include lcd_1602.h#include define.h/state some functionsvoid L1602_init();void Time0_init();/*系统初始化*/void sys_init()flag=1;/绿灯green=1;red=0;yellow=0;L16

5、02_init();/1602液晶初始化Time0_init();/定时器0初始化/*1602初始化*/void L1602_init(void)enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enable(0xd0);L1602_string(1,2,traffic lights);sec_h=g_h;sec_l=g_l;L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);/*定时器0初始化*/void Time0_init()TMOD=0x01;/time0,time1工作在方式

6、一IE=0x8a;/开EA,允许ET0,允许ET1TH0=0x4c;/50ms,晶振是11.0592MTL0=0x00;/TH1=0xfc;/1ms/TL1=0x66;TR0=1;/time0开始计数#endif(3)control.h#ifndef _control_h_#define _control_h_#include #include lcd_1602.h#include define.h#include delay.h /*state some functions*/void inc();void dec();void fmq();/*键盘扫描函数*/void key_scan()

7、if(ok=0)delay_ms(5);if(ok=0)fmq();enable(0x0c);/关光标first=0;TR0=1;/开始计数else _nop_();else if(jia=0 | jian=0)delay_ms(5);if(jia=0 | jian=0)TR0=0;/停止计数fmq();while(!first)first=1;enable(0x0f);/开光标,开反白if(jia=0)inc();else if(jian=0)dec();else_nop_();/*加一*/void inc(void)_nop_();if(green=1 & yellow=0 & red=0

8、)if(g_l9 & g_h5) g_l+;elseif(g_h5)g_h+;g_l=0;elseg_h=5;g_l=0; sec_h=g_h;sec_l=g_l;else if(yellow=1 & red=0 & green=0)if(y_l9 & y_h5) y_l+;elseif(y_h5)y_h+;y_l=0;elsey_h=5;y_l=0; sec_h=y_h;sec_l=y_l; else if(red=1 & green=0 & yellow=0 )if(r_l9 & r_h5) r_l+;elseif(r_h0 & g_h0) g_l-;elseif(g_h0)g_h-;g_

9、l=9;else if(g_l0)g_l-;elseg_h=0;g_l=0;sec_h=g_h;sec_l=g_l;else if(yellow=1 & green=0 & red=0) if(y_l0 & y_h0) y_l-;elseif(y_h0)y_h-;y_l=9;else if(y_l0)y_l-;elsey_h=0;y_l=0;sec_h=y_h;sec_l=y_l; else if(red=1 & yellow=0 & green=0)if(r_l0 & r_h0) r_l-;else if(r_h0)r_h-;r_l=9;else if(r_l0) r_l-;elser_h=

10、0;r_l=0;sec_h=r_h;sec_l=r_l;L1602_char(2,9,sec_l+0x30);L1602_char(2,8,sec_h+0x30);/*蜂鸣器鸣响一声*/void fmq()unint i=150;while(i-)bell=bell;delay_ms(1);/*time0 service function*/void time0() interrupt 1static count=0;TR0=0;if(count=20)/1scount=0;if(sec_l=0)if(sec_h=0)/30s结束if(flag=1)flag+;green=1;red=0;ye

11、llow=0;sec_h=g_h;sec_l=g_l;else if(flag=2)/状态二,亮黄灯flag+;green=0;red=0;yellow=1;sec_h=y_h;sec_l=y_l;else if(flag=3)/状态三,红灯亮flag=1;/回到状态一,绿灯亮green=0;red=1;yellow=0;sec_h=r_h;sec_l=r_l; else/个位为0而已 sec_h-;sec_l=9;elsesec_l-;L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);else count+; TH0=0x4c;TL0

12、=0x00;TR0=1;#endif(4)lcd_1602.h#ifndef_lcd_1602_h#define_lcd_1602_h#include define.h#include delay.huchar Convert(uchar In_Date) uchar i, Out_Date = 0, temp = 0; for(i=0; i i) & 0x01; Out_Date |= (temp (7 - i); return Out_Date;/*写命令*/void enable(uchar del)P0 = Convert(del);RS = 0;RW = 0;E = 0;delay(

13、);E = 1;delay();/*写数据*/void write(uchar del)P0 = Convert(del);RS = 1;RW = 0;E = 0;delay();E = 1;delay();/*写字符*/void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);write(sign);/*写字符串*/void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);while(1)if(*p = 0) break;write(*p);p+;#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号