欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:4148387       资源大小:38.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    基于单片机STC89C52RC的交通灯摘要:本交通灯系统采用STC89C52RC作为核心控制器,控制红绿黄三盏灯,来达到模拟日常交通灯系统,其中倒计时时间通过1602显示出来。关键词:交通灯 1602液晶一、 设计方案整个模拟交通灯系统用单片机STC89C52RC作为核心控制器,有序的控制着红黄绿三盏灯的运行,实际交通灯系统所需的倒计时时间采用1602显示出来,并且其倒计时时间可通过独立式键盘进行调整。STC89C52红黄绿LED1602液晶独立式键盘 系统框图二、 主程序流程图开始系统初始化 等待中断 N 按键是否按下? Y调用按键处理函数 返回三、 附录-源程序(C)一、the main function of this system /*用stc52实现简易交通灯*/#include<reg52.h>#include<intrins.h>#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#define 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;/秒针十位ucharsec_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;L1602_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工作在方式一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 <intrins.h>#include "lcd_1602.h"#include "define.h"#include "delay.h" /*state some functions*/void inc();void dec();void fmq();/*键盘扫描函数*/void key_scan()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)if(g_l<9 && g_h<5) g_l+;elseif(g_h<5)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_l<9 && y_h<5) y_l+;elseif(y_h<5)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_l<9 && r_h<5) r_l+;elseif(r_h<5)r_h+;r_l=0;else r_h=5;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 dec(void)_nop_();if(green=1 && yellow=0 && red=0)if(g_l>0 && g_h>0) g_l-;elseif(g_h>0)g_h-;g_l=9;else if(g_l>0)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_l>0 && y_h>0) y_l-;elseif(y_h>0)y_h-;y_l=9;else if(y_l>0)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_l>0 && r_h>0) r_l-;else if(r_h>0)r_h-;r_l=9;else if(r_l>0) r_l-;elser_h=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;yellow=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=0x00;TR0=1;#endif(4)lcd_1602.h#ifndef_lcd_1602_h#define_lcd_1602_h#include "define.h"#include "delay.h"uchar Convert(uchar In_Date) uchar i, Out_Date = 0, temp = 0; for(i=0; i<8; i+) temp = (In_Date >> i) & 0x01; Out_Date |= (temp << (7 - i); return Out_Date;/*写命令*/void enable(uchar del)P0 = Convert(del);RS = 0;RW = 0;E = 0;delay();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

    注意事项

    本文(基于单片机STC89C52RC的交通灯.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开