找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2289|回复: 0
打印 上一主题 下一主题
收起左侧

基于LCD1602的交通灯--含源代码,原理图,pcb图

[复制链接]
跳转到指定楼层
楼主
新人闲暇之余所做。。。


  1. #include "reg52.h"                       

  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. #define xiaoden P1
  5. u8 Second,First;
  6. u16 n;
  7. sbit bell=P2^0;


  8.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         sbit green00=P1^5;
  9. sbit yellow00=P1^4;
  10. sbit red00=P1^3;
  11. sbit green10=P1^2;
  12. sbit yellow10=P1^1;
  13. sbit red10=P1^0;
  14. sbit green01=P3^3;
  15. sbit yellow01=P3^2;
  16. sbit red01=P3^1;
  17. sbit green11=P3^0;
  18. sbit yellow11=P1^7;
  19. sbit red11=P1^6;

  20. u8 count,shi,fen,miao;
  21. sbit rw=P2^5;
  22. sbit rs=P2^6;
  23. sbit lcden=P2^7;
  24. u8 code table[]=" 2017-11-19 SUN";
  25. u8 code table1[]="            30";

  26. void delay(u16 z)
  27.   {
  28.       u16 x,y;
  29.             for(x=z;x>0;x--)
  30.                   for(y=115;y>0;y--);
  31.    }   
  32.    void delays(u16 i)
  33. {
  34.         while(i--);       
  35. }
  36. void Timer0Init()
  37. {
  38.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  39.         TH0=0XFC;        //给定时器赋初值,定时1ms
  40.         TL0=0X18;       
  41.         ET0=1;//打开定时器0中断允许
  42.         EA=1;//打开总中断
  43.         TR0=1;//打开定时器                       
  44. }
  45. void write_com(u8 com)                         //数据
  46. {
  47.         rs=0;
  48.         rw=0;
  49.         lcden=0;
  50.         P0=com;
  51.         delay(5);
  52.         lcden=1;
  53.         delay(5);
  54.         lcden=0;

  55. }
  56. void write_date(u8 date)   //命令
  57. {
  58.           rs=1;
  59.           rw=0;
  60.           lcden=0;
  61.           P0=date;
  62.           delay(5);
  63.           lcden=1;
  64.           delay(5);
  65.           lcden=0;
  66. }

  67.          void init()
  68.          {
  69.            u8 num;
  70.            lcden=0;
  71.            fen=2;
  72.          miao=30;
  73.           write_com(0x38);
  74.           write_com(0x01);
  75.       write_com(0x0c);
  76.           write_com(0x06);                               
  77.        
  78.            write_com(0x00+0x80);
  79.            for(num=0;num<15;num++)
  80.                           {
  81.                            write_date(table[num]);
  82.                                 delay(20);


  83.                           }
  84.            write_com(0x40+0x80);
  85.             for(num=0;num<12;num++)
  86.                     {  write_date(table1[num]);
  87.                                 delay(20); }

  88.                          Timer0Init();

  89.          }
  90.   void write_sfm(u8 add,u8 date)       
  91.                  {
  92.                  u8 shi,ge;
  93.                  shi=date/10;
  94.                  ge=date%10;
  95.                  write_com(0x80+0x40+add);
  96.                  write_date(0x30+shi);
  97.                  write_date(0x30+ge);

  98.                  }



  99. void main()
  100. {       
  101.      init();
  102.         Second = 1;
  103.          First=1;
  104.         Timer0Init();
  105.          

  106.        
  107.         while(1)
  108.         {
  109.                 if(Second == 71)
  110.                 {
  111.                         Second = 1;
  112.                         miao=31;
  113.                 }
  114.                 if(First==142)
  115.                 {
  116.                     First=1;
  117.                         }

  118.                 //--宝田路通行,30秒--//
  119.                 if(Second < 31)
  120.                 {
  121.                     if(count==2)
  122.                         {
  123.                           count=0;
  124.                           
  125.                          miao--;
  126.                          }
  127.                          write_sfm(14,miao);
  128.                          
  129.                         //--宝田路通行--//

  130.                         xiaoden= 0xFF;  //将所有的灯熄灭
  131.                         green11 = 1;
  132.                         green01 = 1;
  133.                         yellow01=1;
  134.                         red01=1;

  135.                         green00 = 0;                           
  136.                         green01        = 0;   

  137.                         red10 = 0;      
  138.                         red11= 0;
  139.              
  140.                         if((First==52))
  141.                         {
  142.                             n=100;
  143.                                    while(n--)
  144.                                 {
  145.                                 bell=~bell;
  146.                     delays(100);
  147.                                 }
  148.                                
  149.                 
  150.                     }
  151.                                 if((First==54))
  152.                         {          n=100;
  153.                                    while(n--)
  154.                                 {
  155.                                 bell=~bell;
  156.                     delays(100);
  157.                                 }
  158.                     }
  159.                                 if((First==56))
  160.                         {  n=100;
  161.                                    while(n--)
  162.                                 {
  163.                                 bell=~bell;
  164.                     delays(100);
  165.                                 }
  166.                 
  167.                     }
  168.                                         if((First==58))
  169.                         {
  170.                                     n=100;          
  171.                                    while(n--)
  172.                                 {
  173.                                 bell=~bell;
  174.                     delays(100);
  175.                                 }
  176.                 
  177.                     }
  178.                                         if((First==60))
  179.                         {
  180.                                   n=100;
  181.                                    while(n--)
  182.                                 {
  183.                                 bell=~bell;
  184.                     delays(100);
  185.                                 }
  186.                 
  187.                     }

  188.                 }               

  189.                 //--黄灯等待切换状态,5秒--//
  190.                 else if(Second < 36)
  191.                 {
  192.                      if(miao==0)
  193.                          {
  194.                            miao=5;

  195.                          }
  196.                          if(count==2)
  197.                          {
  198.                             count=0;
  199.                        
  200.                            miao--;}
  201.                            write_sfm(14,miao);
  202.                         //--黄灯阶段--//

  203.                         xiaoden= 0xFF;  //将所有的灯熄灭
  204.                         green11 = 1;
  205.                         green01 = 1;
  206.                         yellow01=1;
  207.                         red01=1;


  208.                         yellow00= 0;                          
  209.                         yellow01= 0;   

  210.                         red10 = 0;   
  211.                         red11= 0;      
  212.                 }

  213.                 //--前进路通行--//
  214.                 else if(Second < 66)
  215.                 {
  216.                      if(miao==0)
  217.                           {
  218.                           miao=30;
  219.                           }
  220.                           if(count==2)
  221.                           {
  222.                           count=0;
  223.                           miao--;
  224.                           }
  225.                           write_sfm(14,miao);
  226.        

  227.                         //--绿灯阶段--//
  228.                     xiaoden= 0xFF;  //将所有的灯熄灭
  229.                         green11 = 1;
  230.                         green01 = 1;
  231.                         yellow01=1;
  232.                         red01=1;

  233.                         red00 = 0;                              
  234.                         red01= 0;      

  235.                         green10 = 0;     
  236.                         green11 = 0;   
  237.                
  238.                   
  239.                         if((First==122))
  240.                         {
  241.                          n=100;
  242.                                    while(n--)
  243.                                 {
  244.                                 bell=~bell;
  245.                     delays(100);
  246.                                 }
  247.                 
  248.                     }
  249.                                 if((First==124))
  250.                         {
  251.                                  n=100;
  252.                                    while(n--)
  253.                                 {
  254.                                 bell=~bell;
  255.                     delays(100);
  256.                                 }
  257.                 
  258.                     }
  259.                                 if((First==126))
  260.                         {
  261.                                  n=100;
  262.                                    while(n--)
  263.                                 {
  264.                                 bell=~bell;
  265.                     delays(100);
  266.                                 }
  267.                     }
  268.                                 if((First==128))
  269.                         {
  270.                                  n=100;
  271.                                    while(n--)
  272.                                 {
  273.                                 bell=~bell;
  274.                     delays(100);
  275.                                 }
  276.                 
  277.                     }
  278.                                 if((First==130))
  279.                         {
  280.                                  n=100;
  281.                                    while(n--)
  282.                                 {
  283.                                 bell=~bell;
  284.                     delays(100);
  285.                                 }
  286.                 
  287.                     }
  288.                
  289.                    }

  290.                 //--黄灯等待切换状态,5秒--//
  291.                 else
  292.                 {
  293.                                  if(miao==0)
  294.                                  {
  295.                                     miao=5;
  296.                                  }
  297.                                  if(count==2)
  298.                                  {
  299.                                  count=0;
  300.                                  miao--; }
  301.                                  write_sfm(14,miao);

  302.                         //--黄灯阶段--//

  303.                         xiaoden= 0xFF;  //将所有的灯熄灭
  304.                         green11 = 1;
  305.                         green01 = 1;
  306.                         yellow01=1;
  307.                         red01=1;


  308.                         red00 = 0;                           
  309.                         red01        = 0;     

  310.                         yellow10 = 0;   
  311.                         yellow11 = 0;      
  312.                
  313.         }        }                               
  314. }



  315. void Timer0() interrupt 1
  316. {
  317.         static   u16 i,j;
  318.         TH0=0XFC;        //给定时器赋初值,定时1ms
  319.         TL0=0X18;
  320.         i++;
  321.         j++;
  322.    

  323.         if(j==500)
  324.         {
  325.            j=0;
  326.            First++;
  327.            count++;
  328.            }
  329.        
  330.         if(i==1000)
  331.         {
  332.                 i=0;
  333.                 Second ++;       
  334.         }       
  335. }
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表