欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于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)


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

使用道具 舉報

沙發
ID:435222 發表于 2018-11-28 20:09 | 只看該作者
謝謝樓主
回復

使用道具 舉報

板凳
ID:618143 發表于 2019-10-29 23:07 | 只看該作者
多謝
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表