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

標題: 基于51單片機的電子表仿真設計+代碼 [打印本頁]

作者: littlemorning    時間: 2018-11-27 19:47
標題: 基于51單片機的電子表仿真設計+代碼
51單片機課程設計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. //電子表,針對教材設計
  2. //用共陽數碼管在P0口、P2口以及74hc04芯片驅動下,顯示24小時制電子表
  3. //電子表程序是利用STC8591內部的定時∕計數器實現精確計數。
  4. //電子表共有四個按鍵key1、key2、key3、key4分別實現調模式、
  5. //增加、減少、復位功能,其中調模式按鍵key1可以分別調節小時、分鐘、秒鐘、鬧鈴          
  6. //設計:單片機創新工作室--王曙光設計,2015年12月15日
  7. #include<reg51.h>
  8. #include<key.c>
  9. unsigned char i,j,k;
  10. unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,
  11.                                                                 0x92,0x82,0xf8,0x80,0x90};
  12. unsigned char flash;
  13. sbit SW = P3^3;                                                                                                                                                //接繼電器驅動電路,低電平繼電器吸合,控制電鈴
  14. void timer0_isr(void) interrupt 1
  15. {
  16.         TH0 = 0xf8;
  17.         TL0 = 0x2f;
  18.         i++;
  19.         if(i >= 250)                                                                                                                                        //半秒時間到
  20.         {
  21.                 flash = ~flash;                                                                                                                                //得到8位閃爍變量
  22.                 i = 0;
  23.                 j++;
  24.         }
  25.         if(j >= 2)                                                                                                                                                //1分鐘到
  26.         {
  27.                 sec++;
  28.                 j = 0;
  29.         }                                                                                                       
  30.         if(sec >= 60)                                                                                                                                        //1分鐘到
  31.         {                                                                                                                                               
  32.                 min++;
  33.                 sec = 0;
  34.         }
  35.         if(min >= 60)                                                                                                                                        //1小時到
  36.         {                                                                                                 
  37.                 hour++;
  38.                 min = 0;
  39.         }
  40.         if(hour >= 24)   
  41.         hour = 0;
  42.         P0 = 0xff;                                                                                                                                                //Protuse軟件仿真消隱
  43.         if(key1_flag == 0)                                                                                                                                //正常走時
  44.         {
  45.                 switch(k)
  46.                 {
  47.                         case 0:P0 = seven_seg[sec % 10]; P2 = ~0x01;break;
  48.                         case 1:P0 = seven_seg[sec / 10]; P2 = ~0x02;break;
  49.                            case 2:P0 = seven_seg[min % 10] & (0x7f | flash); P2 = ~0x04;break;                //小數點閃爍
  50.                            case 3:P0 = seven_seg[min / 10]; P2 = ~0x08;break;
  51.                            case 4:P0 = seven_seg[hour % 10] & (0x7f | flash); P2 = ~0x10;break;        //小數點閃爍
  52.                            case 5:P0 = seven_seg[hour / 10]; P2 = ~0x20;break;
  53.                 }
  54.         }
  55.         if(key1_flag == 1)                                                                                                                                //調小時,小時閃爍
  56.         {
  57.                 j = 0;
  58.                 switch(k)
  59.                 {
  60.                         case 0: P0 = seven_seg[sec_t % 10]; P2 = ~0x01;break;
  61.                         case 1: P0 = seven_seg[sec_t / 10]; P2 = ~0x02;break;
  62.                            case 2: P0 = seven_seg[min_t % 10]; P2 = ~0x04;break;
  63.                            case 3: P0 = seven_seg[min_t / 10]; P2 = ~0x08;break;
  64.                            case 4: P0 = seven_seg[hour_t % 10] | flash; P2 = ~0x10;break;                        //小時閃爍
  65.                            case 5: P0 = seven_seg[hour_t / 10] | flash; P2 = ~0x20;break;                        //小時閃爍
  66.                 }
  67.         }
  68.         if(key1_flag == 2)                                                                                                                                //調分鐘
  69.         {
  70.                 j = 0;
  71.                 switch(k)
  72.                 {
  73.                         case 0: P0 = seven_seg[sec_t % 10]; P2 = ~0x01;break;
  74.                         case 1: P0 = seven_seg[sec_t / 10]; P2 = ~0x02;break;
  75.                            case 2: P0 = seven_seg[min_t % 10]| flash; P2 = ~0x04;break;                         //分閃爍
  76.                            case 3: P0 = seven_seg[min_t / 10]| flash; P2 = ~0x08;break;                        //分閃爍
  77.                            case 4: P0 = seven_seg[hour_t % 10] ; P2 = ~0x10;break;
  78.                            case 5: P0 = seven_seg[hour_t / 10]; P2 = ~0x20;break;
  79.                 }
  80.         }       
  81.         if(key1_flag == 3)                                                                                                                                //調秒
  82.         {
  83.                 j = 0;
  84.                 switch(k)
  85.                 {
  86.                         case 0: P0 = seven_seg[sec_t % 10]| flash; P2 = ~0x01;break;                        //秒閃爍
  87.                         case 1: P0 = seven_seg[sec_t / 10]| flash; P2 = ~0x02;break;                        //秒閃爍
  88.                            case 2: P0 = seven_seg[min_t % 10]; P2 = ~0x04;break;
  89.                            case 3: P0 = seven_seg[min_t / 10]; P2 = ~0x08;break;
  90.                            case 4: P0 = seven_seg[hour_t % 10] ; P2 = ~0x10;break;
  91.                            case 5: P0 = seven_seg[hour_t / 10]; P2 = ~0x20;break;
  92.                 }
  93.         }
  94.         if(key1_flag == 4)                                                                                                                                //調定鬧小時
  95.         {
  96.                 j = 0;
  97.                 switch(k)
  98.                 {
  99.                         case 0: P0 = seven_seg[min_r % 10]; P2 = ~0x01;break;
  100.                         case 1: P0 = seven_seg[min_r / 10]; P2 = ~0x02;break;
  101.                            case 2: P0 = seven_seg[hour_r % 10]| flash; P2 = ~0x04;break;                        //定鬧小時閃爍
  102.                            case 3: P0 = seven_seg[hour_r  / 10]| flash; P2 = ~0x08;break;                        //定鬧小時閃爍
  103.                         case 4: P0 = 0xff;P2 = ~0x10;break;                                                                                //不顯示
  104.                         case 5: P0 = 0x0c;P2 = ~0x20;break;                                                                                //顯示字符"P"
  105.                 }
  106.         }
  107.         if(key1_flag == 5)                                                                                                                                //調定鬧分鐘
  108.         {
  109.                 j = 0;
  110.                 switch(k)
  111.                 {
  112.                         case 0: P0 = seven_seg[min_r % 10]| flash; P2 = ~0x01;break;                        //定鬧分閃爍
  113.                         case 1: P0 = seven_seg[min_r / 10]| flash; P2 = ~0x02;break;                        //定鬧分閃爍
  114.                            case 2: P0 = seven_seg[hour_r % 10]; P2 = ~0x04;break;
  115.                            case 3: P0 = seven_seg[hour_r  / 10]; P2 = ~0x08;break;
  116.                         case 4: P0 = 0xff;P2 = ~0x10;break;                                                                                //不顯示
  117.                         case 5: P0 = 0x0c;P2 = ~0x20;break;                                                                                //顯示字符"P"
  118.                 }
  119.         }
  120.         k++;
  121.         if(k >= 6)k = 0;
  122. }
  123. void timer0_initi(void)                                                                                                                                //中斷初始化函數
  124. {
  125.         TMOD = 0x01;                                                                                                                                       
  126.         TH0 = 0xf8;
  127.         TL0 = 0x2f;                                                                                                                                                //每次觸發中斷后從裝初值,使下次對機器脈沖計數2000個計滿溢出引發中斷  約0.2ms
  128.         EA = 1;                                                                                                                                                        //開總中斷
  129.         TR0 = 1;                                                                                                                                                //啟動定時器T0
  130.         ET0 = 1;                                                                                                                                                //開T0中斷
  131. }
  132. void main(void)
  133. {
  134.         timer0_initi();
  135.         while(1)
  136.         {
  137.                 key();                                                                                                                                                //調用按鍵函數
  138.                 if(min == min_r && hour == hour_r)                                                                                        //當時間等于鬧鐘                       
  139.                 SW = 1;                                                                                                                                                //鬧鈴響起
  140.                 else
  141.                 SW = 0;
  142.         }
  143. }
復制代碼

所有資料51hei提供下載:
電子表設計.rar (55.19 KB, 下載次數: 71)



作者: asdasdasd111sd    時間: 2018-11-28 20:09
謝謝樓主
作者: 530184    時間: 2019-10-29 23:07
多謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 色片在线观看 | 国产95在线| 日韩不卡视频在线 | 欧美精品日韩精品国产精品 | 91原创视频| 男女视频在线免费观看 | 日韩喷潮 | 精品久久久久久久久久久久 | 国产精品久久欧美久久一区 | 日韩欧美二区 | 成人免费视频网站在线观看 | 激情视频中文字幕 | 天天综合网天天综合 | 久久专区| 91porn国产成人福利 | 中文字幕在线一区二区三区 | 久久久久久毛片免费观看 | 日韩精品久久久 | 一本大道久久a久久精二百 欧洲一区二区三区 | 久久亚洲精品国产精品紫薇 | 午夜在线电影网 | 欧美亚洲国产一区二区三区 | 日本电影网站 | 毛片免费在线 | 色偷偷噜噜噜亚洲男人 | 亚洲成人在线网 | 亚洲视频免费在线 | 亚洲视频欧美视频 | 精品视频一区二区 | 欧美精品成人 | 国产一区不卡 | 亚洲人在线 | 中文字幕亚洲精品 | 久久精品久久精品久久精品 | 狠狠干狠狠插 | 黄免费在线 | 黄色在线免费观看视频网站 | 国产精品欧美一区二区三区不卡 | 国产精品久久精品 | 一区二区亚洲 | 黑人巨大精品欧美一区二区一视频 |