单片机论坛

 找回密码
 立即注册
QQ登录 只需一步,快速开始
搜索
查看: 193|回复: 8
收起左侧

51单片机交通灯全套设计资料分享

[复制链接]
知了2018 发表于 2018-1-26 19:13 | 显示全部楼层 |阅读模式
交通灯的全套资料包内容:
0.png 0.png
1、用单片机stc89C52 设计一个交通灯系统,并用数码管显示时间,LED指示通行。
2、用protel 99se设计电路图,pcb图等
3、数码管用三极管驱动。
4、按键功能:黄灯常亮(深夜模式)、禁行、东西通行、南北通行、时间加、时间减、切换、确定。
0.jpg 0.jpg 0.jpg 0.jpg 0.jpg

仿真图:
0.jpg
1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样,原理图和程序也是一样的。
2、原理图中的. sch等格式是要用protel99se打开的,没有软件的不要紧,我已帮您转换成word格式和pdf格式的了。
3、程序中的.c文件可以用记事本打开,就是程序了。其他的是写程序是自动生成的,没什么用的。
4、可以按照正面布局,尽量不要按照实物的背面焊接,很容易看错,要按照原理图焊接,不要按照仿真图焊接,因为仿真只是模拟一个现象。
5、关于资料好评后发送~~好评后记得向客服要哦~~~,我们的论文是针对这个设计写的,不包修改,不包查重,望知悉。

原理图 打开方式:
DXP格式用            Altium designer Summer 软件打开
protel99格式用       protel99SE 软件打开
PDF格式用            PDF 软件打开
Word格式用           Word 或用WPS 软件打开

4种格式的原理图都内容是一样的  只是打开方式不同

  请注意,原理图上有些接线的地方是用网络标号连接的,意思就是名字相同的两个点就是连接在一起的相当导线的作用,图上所有的VCC要接在一起,所有的GND要接在一起。

请看原理图焊接,不要看仿真图焊接。

wrod格式里面的原理图是复制出来的,有一点点变行变形,麻烦大家注意一下,尽量看其他三种格式的图焊接,

如果论文里面的原理图和原理图文件夹内的图不一样的话,请大家以原理图文件夹内的为准,原理图文件夹的图是和实物配套的,可以自己截图或复制,然后粘贴到论文里面去。
单片机源程序如下:
  • #include <reg52.h>                 //调用单片机头文件
  • #define uchar unsigned char   //宏定义"uchar"代替"unsigned char"。
  • #define uint  unsigned int          //宏定义"uint"用来定义无符号整型数。


  • //数码管段选定义 0     1    2    3           4           5        6         7          8           9       
  • uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  • //                                           A        B         C          D           E   F        不显示
  •                                          0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};         //断码       

  • uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};       
  • uchar smg_i = 4;    //显示数码管的个位数

  • //数码管位选定义
  • sbit smg_we1 = P2^0;            //数码管位选定义
  • sbit smg_we2 = P2^1;
  • sbit smg_we3 = P3^6;
  • sbit smg_we4 = P3^7;


  • char dx_s = 0;        //东西  南北 倒计时变量
  • sbit dx_red    = P2^4;            //东西红灯
  • sbit dx_green  = P2^3;                //东西绿灯
  • sbit dx_yellow = P2^2;                //东西黄灯

  • sbit nb_red    = P2^7;                //南北红灯
  • sbit nb_green  = P2^6;                //南北绿灯
  • sbit nb_yellow = P2^5;                //南北黄灯       

  • uchar flag_jtd_mode;  //交通灯的模式 根据时间
  • bit flag_1s = 0;
  • bit flag_500ms;
  • bit flag_dx_nb;                 //东西南北模式
  • uchar flag_5m_value;
  • uchar i;
  • uchar flag_alarm;        //模式
  • uchar dx_time = 30,nb_time = 20;   //东西、南北的时间
  • uchar flag_jdgz ;     //交通管制


  • /***********************数码位选函数*****************************/
  • void smg_we_switch(uchar i)
  • {
  •         switch(i)
  •         {
  •                 case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  •                 case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  •                 case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  •                 case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
  •         }       
  • }


  • /********************************************************************
  • * 名称 : delay_1ms()
  • * 功能 : 延时1ms函数
  • * 输入 : q
  • * 输出 : 无
  • ***********************************************************************/
  • void delay_1ms(uint q)
  • {
  •         uint i,j;
  •         for(i=0;i<q;i++)
  •                 for(j=0;j<110;j++);
  • }


  • /********************************************************************
  • * 名称 : display()
  • * 功能 : 数码管显示
  • * 输入 : 无
  • * 输出 : 无
  • ***********************************************************************/
  • void display()
  • {
  •         uchar i;
  •         for(i=0;i<smg_i;i++)
  •         {               
  •                 P0 = 0xff;                  //消隐
  •                 smg_we_switch(i);            //位选
  •                 P0 = dis_smg[i];          //段选          
  •                 delay_1ms(3);
  •         }
  • }

  • /*********************定时器0、定时器1初始化******************/
  • void time0_init()          
  • {
  •         EA  = 1;                   //开总中断
  •         TMOD = 0X11;          //定时器0、定时器1工作方式1
  •         ET0 = 1;                  //开定时器0中断
  •         TR0 = 1;                  //允许定时器0定时
  • //        ET1 = 1;                  //开定时器1中断
  • //        TR1 = 1;                  //允许定时器1定时       
  • }

  • /*********************交通灯处理函数*********************************/
  • void jiaotongdeng_dis()
  • {
  •         if(flag_1s == 1)
  •         {
  •                 flag_1s = 0;
  •                 if(dx_s == 0)
  •                 {
  •                         if(flag_dx_nb == 1)
  •                                 dx_s = nb_time;          //南北时间
  •                         else
  •                                 dx_s = dx_time;          //东西时间
  •                         flag_dx_nb = ~flag_dx_nb;
  •                 }
  •                 dx_s --;
  •         }
  •         dis_smg[0] = smg_du[dx_s % 10] ;
  •         dis_smg[1] = smg_du[dx_s / 10] ;
  •         dis_smg[2] = smg_du[dx_s % 10] ;
  •         dis_smg[3] = smg_du[dx_s / 10] ;

  • /***********************南北时间*********************************/
  •                 if(flag_dx_nb == 0)  
  •                 {
  •                         if(dx_s > 5)
  •                         {
  •                                 dx_red    = 1;  //灭
  •                                 dx_green  =        0;        //亮
  •                                 dx_yellow = 1;        //灭
  •                                 nb_red    = 0;  //亮
  •                                 nb_green  =        1;        //灭
  •                                 nb_yellow = 1;        //灭
  •                                 flag_5m_value = 0;       
  •                         }else if(dx_s <= 5)                 //当小于5秒时  黄灯要闪了
  •                         {
  •                                 dx_red    = 1;    //灭
  •                                 dx_green  =        1;          //灭
  •                                 nb_red    = 0;    //亮
  •                                 nb_green  =        1;          //灭
  •                                 nb_yellow = 1;          //灭
  •                                 if(flag_500ms == 0)
  •                                 {
  •                                         dx_yellow = 0;//亮       
  •                                 }
  •                                 else
  •                                 {
  •                                         dx_yellow = 1;//灭       
  •                                 }
  •                         }
  •                 }
  • /***********************东西时间*********************************/
  •                 if(flag_dx_nb == 1)  
  •                 {
  •                         if(dx_s > 5)
  •                         {
  •                                 dx_red    = 0;     //亮
  •                                 dx_green  =        1;           //灭
  •                                 dx_yellow = 1;           //灭
  •                                 nb_red    = 1;     //灭
  •                                 nb_green  =        0;           //亮
  •                                 nb_yellow = 1;           //灭
  •                                 flag_5m_value = 0;       
  •                         }else if(dx_s <= 5)                 //当小于5秒时  黄灯要闪了
  •                         {
  •                                 dx_red    = 0;     //灭
  •                                 dx_green  =        1;           //灭
  •                                 dx_yellow = 1;           //灭
  •                                 nb_red    = 1;     //灭
  •                                 nb_green  =        1;           //灭
  •                                 if(flag_500ms == 0)           //黄灯闪烁
  •                                 {
  •                                         nb_yellow = 0;        //亮       
  •                                 }
  •                                 else
  •                                 {
  •                                         nb_yellow = 1;        //灭       
  •                                 }
  •                         }
  •         }                       
  • }

  • /********************独立按键程序*****************/
  • uchar key_can;         //按键值

  • void key()         //独立按键程序
  • {
  •         static uchar key_new;
  •         key_can = 20;                   //按键值还原
  •         P1 |= 0x1f;
  •         if((P1 & 0x1f) != 0x1f)                //按键按下
  •         {
  •                 delay_1ms(1);                     //按键消抖动
  •                 if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
  •                 {                                                //确认是按键按下
  •                         key_new = 0;
  •                         switch(P1 & 0x1f)
  •                         {
  •                                 case 0x1e:  key_can = 1;  break;         //得到按键值
  •                                 case 0x1d:  key_can = 2;  break;         //得到按键值
  •                                 case 0x1b:  key_can = 3;  break;         //得到按键值
  •                                 case 0x17:  key_can = 4;  break;         //得到按键值
  •                         }
  •                 }                       
  •         }
  •         else
  •                 key_new = 1;       
  • }

  • uchar menu_1,flag_s;


  • /********************设置函数*****************/
  • void key_with()
  • {
  •         if(key_can == 4)   //交通管制按键
  •         {
  •                 flag_jdgz ++;
  •                 if(flag_jdgz > 5)
  •                         flag_jdgz = 0;       
  •                 if(flag_jdgz == 1)         //  全部亮红灯
  •                 {
  •                         dx_red    = 0;  //亮
  •                         dx_green  =        1;        //灭
  •                         dx_yellow = 1;        //灭
  •                         nb_red    = 0;  //亮
  •                         nb_green  =        1;        //灭
  •                         nb_yellow = 1;        //灭                       
  •                 }
  •                 if(flag_jdgz == 2)         //  东西红灯  南北绿灯
  •                 {
  •                         dx_red    = 0;  //亮
  •                         dx_green  =        1;        //灭
  •                         dx_yellow = 1;        //灭
  •                         nb_red    = 1;  //灭
  •                         nb_green  =        0;        //亮
  •                         nb_yellow = 1;        //灭                       
  •                 }
  •                 if(flag_jdgz == 3)         //  南北红灯  东西绿灯
  •                 {
  •                         dx_red    = 1;  //灭
  •                         dx_green  =        0;        //亮
  •                         dx_yellow = 1;        //灭
  •                         nb_red    = 0;  //亮
  •                         nb_green  =        1;        //灭
  •                         nb_yellow = 1;        //灭                       
  •                 }
  •                 if(flag_jdgz == 4)         //  南北绿灯  东西绿灯
  •                 {
  •                         dx_red    = 1;  //灭
  •                         dx_green  =        0;        //亮
  •                         dx_yellow = 1;        //灭
  •                         nb_red    = 1;  //灭
  •                         nb_green  =        0;        //亮
  •                         nb_yellow = 1;        //灭                       
  •                 }
  •                 if(flag_jdgz == 5)         //  南北黄灯  东西黄灯
  •                 {
  •                         dx_red    = 1;  //灭
  •                         dx_green  =        1;        //灭
  •                         dx_yellow = 0;        //亮
  •                         nb_red    = 1;  //灭
  •                         nb_green  =        1;        //灭
  •                         nb_yellow = 0;        //亮                       
  •                 }
  •         }
  •         if(key_can == 1)          //设置键
  •         {
  •                 menu_1 ++;
  •                 if(menu_1 >= 3)
  •                 {
  •                         menu_1  = 0;
  •                 }
  •         }

  •         if(menu_1 == 1)           //设置东西的时间
  •         {
  •                 if(key_can == 2)
  •                 {
  •                         dx_time ++ ;                //加1
  •                         if(dx_time > 99)
  •                                 dx_time = 99;
  •                 }
  •                 if(key_can == 3)
  •                 {
  •                         dx_time -- ;                //减1
  •                         if(dx_time <= 10)
  •                                 dx_time = 10;
  •                 }
  •                 dis_smg[0] = smg_du[10] ;        //显示为A
  •                 dis_smg[1] = smg_du[10] ;        //显示为A
  •                 dis_smg[2] = smg_du[dx_time % 10] ;                //显示东西设置的时候
  •                 dis_smg[3] = smg_du[dx_time / 10] ;       
  •         }       
  •         if(menu_1 == 2)           //设置南北的时间
  •         {
  •                 if(key_can == 2)
  •                 {
  •                         nb_time ++ ;                //加1
  •                         if(nb_time > 99)
  •                                 nb_time = 99;
  •                 }
  •                 if(key_can == 3)
  •                 {
  •                         nb_time -- ;                //减1
  •                         if(nb_time <= 10)
  •                                 nb_time = 10;
  •                 }
  •                 dis_smg[0] = smg_du[11] ;        //显示为B
  •                 dis_smg[1] = smg_du[11] ;        //显示为B
  •                 dis_smg[2] = smg_du[nb_time % 10] ;                //显示东西设置的时候
  •                 dis_smg[3] = smg_du[nb_time / 10] ;       
  •         }
  • }
  • ……………………

  • …………限于本文篇幅 余下代码请从51黑下载附件…………
  • 复制代码
    全部资料51hei下载地址:
    ##单片机交通灯 4个数码管 大.rar (14.26 MB, 下载次数: 15)

    评分

    参与人数 1黑币 +100 收起 理由
    admin + 100 共享资料的黑币奖励!
    查看全部评分
    回复 使用道具 举报
     楼主| 知了2018 发表于 2018-1-26 19:19 来自手机 | 显示全部楼层
    这资料不错哦
    回复 使用道具 举报
     楼主| 知了2018 发表于 2018-1-26 19:53 来自手机 | 显示全部楼层
    我自己下载怎么还扣币啊~
    回复 使用道具 举报
    宋老师的魔咒 发表于 2018-1-27 17:33 | 显示全部楼层
    6通天塔
    回复 使用道具 举报
    lemon0210 发表于 2018-1-30 14:40 | 显示全部楼层
    下载了根本没用,骗子,骗黑币
    回复 使用道具 举报
    6#
    无效楼层,该帖已经被删除
     楼主| 知了2018 发表于 2018-2-8 17:48 来自手机 | 显示全部楼层
    lemon0210 发表于 2018-1-30 14:40
    下载了根本没用,骗子,骗黑币

    你遇到的是哪种情况,有需要我帮忙不?
    回复 使用道具 举报
     楼主| 知了2018 发表于 2018-2-8 17:49 来自手机 | 显示全部楼层
    lemon0210 发表于 2018-1-30 14:40
    下载了根本没用,骗子,骗黑币

    你下载后要用电脑解压文件包啊
    回复 使用道具 举报
     楼主| 知了2018 发表于 2018-2-8 17:50 来自手机 | 显示全部楼层
    宋老师的魔咒 发表于 2018-1-27 17:33
    6通天塔

    什么?    。。。。
    回复 使用道具 举报
    admin 发表于 2018-2-9 01:47 | 显示全部楼层
    lemon0210 发表于 2018-1-30 14:40
    下载了根本没用,骗子,骗黑币

    经过测试,楼主的的资料还是挺有用的.
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 立即注册
    本版积分规则
    QQ|手机版|小黑屋|单片机论坛
    Powered by 单片机教程网
    快速回复 返回顶部 返回列表