久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2183|回復: 0
打印 上一主題 下一主題
收起左側

單片機模擬交通燈 數碼管計時 定時中斷源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:910593 發表于 2021-5-1 22:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
模擬交通燈 數碼動態顯示 定時器定時中斷 親測好用
可以給學習定時中斷和數碼管朋友提供參考

單片機源程序如下:
  1. #include "reg52.h"
  2. #include "intrins.h"
  3.    typedef unsigned char u8;
  4.    typedef unsigned int u16;
  5.    
  6. #define led P3
  7. #define xianshismg P1
  8.           sbit smgdt=P0^0;          //數碼管動態
  9.         sbit smgdt1=P0^1;
  10.         sbit smgdt2=P0^2;

  11.         sbit green30=P3^0 ;
  12.         sbit red31=P3^1;                                                 
  13.                                                                                          
  14.         sbit green32=P3^2;                                               
  15.         sbit yello33=P3^3;                                                 
  16.         sbit red34=P3^4;


  17.         sbit green35=P3^5;                                         
  18.         sbit yello36=P3^6;                                         
  19.         sbit red37=P3^7;

  20.         sbit green20=P2^0 ;
  21.         sbit red21=P2^1;
  22.   u16 daojishi=0;
  23.   u8 disdelay [8];

  24.   u8 code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  25.   0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  26.   0x39,0x5e,0x79,0x71,0x00};


  27.              void delay(u16 i)
  28.    {
  29.    while(i--);
  30.    }


  31.    void time0init ()                //t0中斷初始化
  32.    {
  33.   EA=1;                                //總開關                   IE
  34.   ET0=1;                        //t0中斷允許位           IE

  35.   TR0=1;                        //t0計數允許位           TCON

  36.   TMOD|=0X01;                //設置定時器1和0的工作條件 方式和13/16/8位        TMOD          
  37.                                //為了不改變其他位用或運算 TMOD|=0X01;
  38.   TH0= 0xfc;                //TH和TL都是對t0進行賦初值 因為t0只有溢出時才會發生中斷
  39.   TL0 =0x18;
  40.    }

  41.    


  42.            void ngfg( )                  //哪個
  43. {                   u8 i;
  44.       
  45.          for(i=0;i<8;i++)
  46.          {
  47.                 switch(i)
  48.              {       
  49.                 case 0:
  50.                 smgdt=0;smgdt1=0;smgdt2=0;break ;
  51.         case 1:
  52.                 smgdt=1;smgdt1=0;smgdt2=0;break ;
  53.                 case 2:
  54.                 smgdt=0;smgdt1=1;smgdt2=0;break ;
  55.                 case 3:
  56.                 smgdt=1;smgdt1=1;smgdt2=0;break ;
  57.                  case 4:
  58.                  smgdt=0;smgdt1=0;smgdt2=1;break ;
  59.              case 5:
  60.                  smgdt=1;smgdt1=0;smgdt2=1;break ;
  61.                  case 6:
  62.                  smgdt=0;smgdt1=1;smgdt2=1;break ;
  63.                 case 7:
  64.                 smgdt=1;smgdt1=1;smgdt2=1;break ;
  65.              }
  66.          
  67.           xianshismg=disdelay[i];
  68.           delay(100);
  69.           xianshismg=0x00 ;
  70.           }
  71. }


  72.    void main()
  73. {   
  74.    time0init ();
  75.    daojishi=1;
  76.              

  77.   while(1)
  78.    {  
  79.      

  80.       if(daojishi==71)
  81.       {
  82.             daojishi=1;
  83.           }
  84.          if(daojishi<31)
  85.      {
  86.           disdelay[0]=smg[(30-daojishi)/10];
  87.           disdelay[1]=smg[(30-daojishi)%10];
  88.           disdelay[2]=0x00;
  89.           disdelay[3]=0x00;

  90.           disdelay[4]=0x00;
  91.           disdelay[5]=0x00;
  92.           disdelay[6]=0x00;
  93.           disdelay[7]=0x00;

  94.            ngfg( );

  95.            led=0xff;                //所有燈初始化
  96.            green20=1 ;
  97.        red21=1;



  98.            green35=0;
  99.        green20=0;
  100.            red31=0;
  101.            red34=0 ;
  102.             
  103.          }
  104.          else if(daojishi<36)
  105.          {
  106.           disdelay[0]=smg[(35-daojishi)/10];
  107.           disdelay[1]=smg[(35-daojishi)%10];
  108.           disdelay[2]=0x00;
  109.           disdelay[3]=0x00;

  110.           disdelay[4]=0x00;
  111.           disdelay[5]=0x00;
  112.           disdelay[6]=0x00;
  113.           disdelay[7]=0x00;

  114.            ngfg( );

  115.           led=0xff;                //所有燈初始化
  116.            green20=1 ;
  117.        red21=1;

  118.            red31=0;
  119.            red21=0;
  120.            yello33=0;
  121.            yello36=0;
  122.          
  123.          }
  124.             else if(daojishi<66)
  125.          {
  126.           disdelay[0]=smg[(65-daojishi)/10];
  127.           disdelay[1]=smg[(65-daojishi)%10];
  128.           disdelay[2]=0x00;
  129.           disdelay[3]=0x00;

  130.           disdelay[4]=0x00;
  131.           disdelay[5]=0x00;
  132.           disdelay[6]=0x00;
  133.           disdelay[7]=0x00;

  134.            ngfg( );

  135.           led=0xff;                //所有燈初始化
  136.            green20=1 ;
  137.        red21=1;

  138.            green30=0 ;
  139.            green32=0;
  140.             red37=0;
  141.                 red21=0;
  142.          
  143.          }
  144.                   else if(daojishi<71)
  145.          {
  146.           disdelay[0]=smg[(70-daojishi)/10];
  147.           disdelay[1]=smg[(70-daojishi)%10];
  148.           disdelay[2]=0x00;
  149.           disdelay[3]=0x00;

  150.           disdelay[4]=0x00;
  151.           disdelay[5]=0x00;
  152.           disdelay[6]=0x00;
  153.           disdelay[7]=0x00;

  154.            ngfg( );

  155.           led=0xff;                //所有燈初始化
  156.            green20=1 ;
  157.        red21=1;

  158.       red31=0;
  159.            red21=0;
  160.            yello33=0;
  161.            yello36=0;
  162.          
  163.          }

  164.    }
  165. }


  166. void time0() interrupt 1
  167. {
  168.    static u16 i;

  169.    TH0= 0xfc;                                         //每次定時中斷完成后都要重新賦值
  170.    TL0 =0x18;                                         //每次定時中斷完成后都要重新賦值
  171.    i++;
  172.     if (i==1000)
  173.   {        i=0;
  174.     daojishi++;
  175.   
  176.   }

  177. }
復制代碼

Keil工程下載:
交通燈.rar (29.71 KB, 下載次數: 16)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美九九 | 亚洲精品一区二三区不卡 | 久草网址| 久久激情av| 国产精品久久久久久av公交车 | 亚洲成人动漫在线观看 | 亚洲欧美日韩精品久久亚洲区 | 久久看看 | 日本不卡一区 | 久草青青 | 中文字幕丁香5月 | 欧美精品国产一区二区 | 欧美成人精品 | 国产成人精品一区二 | 天天干狠狠操 | 亚洲男人天堂 | 亚洲国产一区二区三区, | 亚洲国产成人精品久久 | 国产91丝袜在线18 | 国产成人jvid在线播放 | 蜜桃视频在线观看免费视频网站www | 日韩欧美亚洲一区 | 一级黄色片在线免费观看 | 日韩一区二区三区av | 99久久免费精品国产免费高清 | 成人午夜性成交 | 成人综合在线视频 | 日韩亚洲视频在线 | 日韩视频在线一区 | 欧美手机在线 | av片免费观看 | 国产中文在线观看 | 综合久久综合久久 | 亚洲精品国产成人 | 成人av高清 | av在线天堂 | 韩国av一区二区 | 日本不卡一区二区三区 | 精品日韩一区 | 中文字幕在线视频免费观看 | 精品国产乱码久久久久久老虎 |