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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

應廣單片機制作的計時器秒表程序

[復制鏈接]
跳轉到指定樓層
樓主
芯片:應廣 PMS154C
一個按鍵,一個8位數碼管
1位天/2位小時/2位分鐘/2位秒/1位0.1秒
我發現論壇上關于 應廣單片機 的資料少的可憐,應該是沒多少人用過吧。我發一個我以前寫的8數碼管計時器秒表程序。
因為我直接用的仿真器,所以沒有實物,直接拍的開發板照片。如果有其他的需要,我還可以發發其他的應廣單片機程序。比如,流水燈,數碼管,PWM之類的。

制作出來的實物圖如下:


單片機源程序如下:


  1. /*秒表計時顯示程序?1個按鍵、8位數碼管
  2.         數碼管顯示: 1位天/2位小時/2位分鐘/2位秒/1位0.1秒
  3.         請用T16計時
  4.         按鍵按第一次:開始計數顯示
  5.         按鍵按第二次:暫停計數顯示
  6.         長按按鍵1秒:定時器清零,并停止計數。*/


  7. #include        "extern.h"
  8. #define data PB
  9. #define wei_A PA.6//位
  10. #define duan_B PA.7//段
  11. #define key pa.3
  12. word    time,b,n;
  13. byte duan,wei,keysignal,keysignal2,type;
  14. byte second_01,second,second_10,minute,minute_10,hour,hour_10,day,hour_24;
  15. //                0.1s        /1s                /10s         1分         10分        1小時 /10小時/天/小時
  16. word reload_T16;

  17. void        weiTable(void)
  18. {
  19.         _Pcadd
  20.         {
  21.                 ret                0xfe;//第一位         1111 1110
  22.                 ret         0xfd;//第二位         1111 1101
  23.                 ret                0xfb;//3                1111 1011
  24.                 ret         0xf7;//4                1111 0111
  25.                 ret                0xef;//5                1110 1111
  26.                 ret         0xdf;//6                1101 1111
  27.                 ret                0xbf;//7                1011 1111
  28.                 ret         0x7f;//8                 0111 1111
  29.         }
  30. }

  31. void        duanTable(void)//8位共陰極數碼管 段碼
  32. {
  33.         _Pcadd
  34.         {
  35.                 ret                0x3f;//0                //無小數點
  36.                 ret         0x06;//1
  37.                 ret                0x5b;//2
  38.                 ret         0x4f;//3
  39.                 ret                0x66;//4
  40.                 ret         0x6d;//5
  41.                 ret                0x7d;//6
  42.                 ret         0x07;//7
  43.                 ret                0x7f;//8
  44.                 ret         0x6f;//9

  45.                 ret                0xbf;//0                //帶小數點
  46.                 ret         0x86;//1
  47.                 ret                0xdb;//2
  48.                 ret         0xcf;//3
  49.                 ret                0xe6;//4
  50.                 ret         0xed;//5
  51.                 ret                0xfd;//6
  52.                 ret         0x87;//7
  53.                 ret                0xff;//8
  54.                 ret         0xef;//9
  55.                
  56.         }
  57. }

  58. void T16_Init(void)                //t16中斷
  59. {
  60.         //        $ T16M IHRC,/16,bit10;        
  61. //        reload_T16 = 1024-1000;        //每次進中斷為1ms;
  62.                                 //計算公式為        [1/(時鐘源/分頻器)]*(中斷源-reload_T16)=[1/(16M/16)]*(24)=0.001s
  63.         $ T16M IHRC,/16,bit15;        
  64.         reload_T16 = 32768-1000;        //每次進中斷為1ms;
  65.         //        設定INTEN、INTRQ的初始值
  66.         INTEN.T16 = 1;                                //開T16中斷
  67.         INTRQ.T16 = 0;                                //清零INTRQ寄存器。
  68.         ENGINT;                                                //打開全局中斷
  69. }

  70. void leddis(void)                //查表顯示
  71. {
  72.         
  73.         data = 0x00;        //去重影
  74.         duan_B = 1;
  75.         duan_B = 0;

  76.         A = wei;                //取位碼
  77.         weiTable();
  78.         data = A;
  79.         wei_A = 1;
  80.         wei_A = 0;

  81.         A = duan;                //取段碼
  82.         duanTable();
  83.         data = A;
  84.         duan_B = 1;
  85.         duan_B = 0;
  86. }

  87. void keyscan(void)                //按鍵掃描
  88. {
  89.         if(pa.3==0)                                
  90.         {
  91.                 .delay 10000
  92.                
  93.                 if(pa.3==0)
  94.                 {        if(pa.3==0)
  95.                         {        while(pa.3==0)               
  96.                                 {
  97.                                         n++;
  98.                                         .delay 1000;
  99.                                         if(n>=1000)                //長按1s清零
  100.                                         {        n=0;
  101.                                                 keysignal2=1;
  102.                                                 break;
  103.                                         }
  104.                                 }
  105.                                 keysignal++;        
  106.                                 if(keysignal>2)
  107.                                 {
  108.                                         keysignal=1;
  109.                                 }
  110.                         }
  111.                 }
  112.         }
  113.         if(keysignal==1)                                //按鍵1開始
  114.         {
  115.                 type=1;
  116.                 n=0;
  117.         }
  118.         if(keysignal==2)                                //按鍵2暫停        
  119.         {
  120.                 type=0;
  121.                 n=0;
  122.         }
  123.         if(keysignal2==1)                                //長按清零        
  124.         {                keysignal=2;
  125.                         time=0;
  126.                         second_01=1;                        //0.1秒
  127.                         second=1;                                //秒
  128.                         second_10=1;                        //10秒
  129.                         minute=1;                                //分
  130.                         minute_10=1;                        //10分
  131.                         hour=1;                                        //小時
  132.                         hour_10=1;                                //10時
  133.                         day=1;                                        //天
  134.                         hour_24=1;                                //24小時
  135.                         keysignal2=0;
  136.                         type=0;
  137.                         while(pa.3==0){nop;}
  138.         }

  139. }

  140. void        FPPA0 (void)
  141. {
  142.         .ADJUST_IC        SYSCLK=IHRC/16, IHRC=16MHz, VDD=5V;
  143.         T16_Init();
  144.         paph=0b1111_1111;                        //啟用Pa端口的,上拉電阻
  145.         pac=0b1110_0110;                        //開啟pa.0,pa.3,pa.4輸入功能
  146.         pbc=0xff;                                //設置Pb口為輸出功能
  147.         pb=0xff;                                //設置Pb口全部輸出高電平

  148.         time=0;
  149.         wei=8;
  150.         second_01=1;                //0.1秒
  151.         second=1;                        //秒
  152.         second_10=6;                //10秒
  153.         minute=10;                        //分
  154.         minute_10=6;                //10分
  155.         hour=4;                                //小時
  156.         hour_10=3;                        //10時
  157.         day=9;                                //天
  158.         hour_24=23;                        //24小時
  159.         duan=1;
  160.         keysignal=0;
  161.         keysignal2=0;
  162.         n=0;
  163.         type=0;
  164.         
  165.         while (1)
  166.         {        
  167.                 keyscan();
  168.         }
  169. }

  170. void        Interrupt (void)//T16
  171. {
  172.         pushaf;

  173.         if (Intrq.T16)
  174.         {        stt16 reload_T16;                //設定計數器初始值reload_T16
  175.                 if(type==1)                                //按鍵控制計時啟停
  176.                 {
  177.                         time++;
  178.                 }
  179.                 leddis();
  180.                 b++;
  181.                 if(b>8)
  182.                 {b=0;}
  183.                 if(time>=100)//0.1s
  184.                                 {        time=0;
  185.                                         second_01++;
  186.                                         if(second_01>10)                                                        //1s
  187.                                         {        second_01=1;second++;                                        //秒歸零,進10s                                                
  188.                                                 if(second>10)//10s
  189.                                                 {        second=1;second_10++;                                //10秒歸零,進分鐘                                                        
  190.                                                         if(second_10>6)//1M
  191.                                                         {        second_10=1;minute++;                        //分鐘歸零,進10分                                                               
  192.                                                                 if(minute>10)//10m
  193.                                                                 {        minute=1;minute_10++;                //10分歸零,進1h                                                                        
  194.                                                                         if(minute_10>6)//1h
  195.                                                                         {        minute_10=1;        
  196.                                                                                 hour++;
  197.                                                                                 hour_24++;                                //1h歸零,進10h                                                                        
  198.                                                                                 if(hour>10)//10h
  199.                                                                                 {        hour=1;        hour_10++;        //10h>20h
  200.                                                                                 }
  201.                                                                                 if(hour_24>=24)//1day        //24小時歸零,進天
  202.                                                                                 {        hour_10=1;                        //10小時清零
  203.                                                                                         hour_24=1;                        //24小時清零
  204.                                                                                         hour=1;                                //小時清零
  205.                                                                                         day++;                                //天加
  206.                                                                                         if(day>10)                        //10天清零
  207.                                                                                         {day=1;second_01=1;}//天歸零        
  208.                                                                                 }
  209.                                                                         }
  210.                                                                 }
  211.                                                         }
  212.                                                 }
  213.                                         }
  214.                                 }
  215.                 switch(b)
  216.        {                  
  217.           case 0:         
  218.                                 duan=second_01;                //0.1秒
  219.                                 wei=8;
  220.                         break;   
  221.           case 1:
  222.                                 duan=second+10;                //1s
  223.                                 wei=7;
  224.                         break;
  225.           case 2:
  226.                                 duan=second_10;                //10s
  227.                                 wei=6;
  228.                         break;
  229.           case 3:
  230.                                 duan=minute+10;                //分
  231.                                 wei=5;
  232.                         break;
  233.           case 4:
  234.                                 duan=minute_10;                //10分
  235.                                 wei=4;
  236.                         break;
  237.           case 5:
  238.                                 duan=hour+10;                //時
  239.                                 wei=3;
  240.                         break;
  241.           case 6:
  242.                                 duan=hour_10;                //10小時
  243.                                 wei=2;
  244.                         break;
  245.           case 7:
  246.                                 duan=day+10;                //天
  247.                                 wei=1;
  248.                         break;
  249.           default:break;     
  250.          }        
  251.                
  252.                 Intrq.T16        =        0;
  253.         }

  254.         popaf;
  255. }
復制代碼
以上代碼下載: T0510 1個按鍵、8位數碼管秒表計時.7z (13.84 KB, 下載次數: 54)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:323213 發表于 2023-6-2 23:18 | 只看該作者
樓主,也在學習應廣的單片機,我想pms150c寫一個程序,如軟件檢測系統:當第3腳檢測到高電平后,第6腳輸出高電平,在6腳輸出高后,第5腳檢測NTC,溫度檢測功能,若5腳檢測到溫度高于57度后,第6腳由高電平變低電平,當溫度降低到45度后,第6腳再輸出高電平。當第3腳為低電平時,關閉所有功能。

51hei截圖20230602231639.jpg (50.37 KB, 下載次數: 99)

51hei截圖20230602231639.jpg
回復

使用道具 舉報

板凳
ID:1083996 發表于 2023-6-16 08:49 | 只看該作者
時分秒,6位數碼管,實現倒計時調整,調整好時間后,I接收信號開始倒計時,倒計時至00.00.00結束,O端輸出一個信號帶繼電器負載;當輸入端再次接收到信號,倒計時重新開始,不用再次調整時間;
用最小系統方便弄嗎
回復

使用道具 舉報

地板
ID:1102110 發表于 2023-12-2 10:21 | 只看該作者
electmo 發表于 2023-6-2 23:18
樓主,也在學習應廣的單片機,我想pms150c寫一個程序,如軟件檢測系統:當第3腳檢測到高電平后,第6腳輸出 ...

這個是proteus吧,能仿真應廣的單片機嗎?
回復

使用道具 舉報

5#
ID:1102110 發表于 2023-12-2 11:02 | 只看該作者
electmo 發表于 2023-6-2 23:18
樓主,也在學習應廣的單片機,我想pms150c寫一個程序,如軟件檢測系統:當第3腳檢測到高電平后,第6腳輸出 ...

這個是proteus吧?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 有码一区| 欧美日韩电影一区二区 | 91人人在线 | 欧美日韩成人 | yeyeav| 国产精品亚洲一区 | 亚洲一区二区视频 | 国产一区二区三区 | 国产91精品在线 | 久久久久久亚洲 | 中文字幕一区二区视频 | 99精品亚洲国产精品久久不卡 | 日韩免费| 2018中文字幕第一页 | 日韩亚洲一区二区 | 狠狠躁18三区二区一区 | 国产精品久久久久久婷婷天堂 | 久久久久se | av片网站| 日日碰碰 | 欧美成人免费电影 | 日韩www视频 | 国产亚洲欧美日韩精品一区二区三区 | 国产精品美女www爽爽爽视频 | 欧美久久久久久久 | 在线色网 | 亚洲经典一区 | 欧美精品一区久久 | 在线观看你懂的网站 | 在线精品一区二区 | 一区二区三区四区不卡 | 欧美一区在线视频 | 在线国产一区 | 欧美中文一区 | 久久久久久久一区二区 | 黄色av网站在线观看 | 日韩在线视频网址 | 欧美日韩高清一区 | 欧美一级网站 | 日韩精品 | 亚洲男人天堂 |