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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1957|回復(fù): 0
收起左側(cè)

bs8412c-3單片機學(xué)習(xí)_中斷程序

[復(fù)制鏈接]
ID:145384 發(fā)表于 2022-12-12 06:58 | 顯示全部樓層 |閱讀模式
bs8412c-3 學(xué)習(xí)_中斷,匯編與C語言
單片機源程序如下:
  1. #include "BS84C12A-3.h"
  2. #include "BS84C12A_LIBV413/BS84C12A_LIBV413.h"
  3. #include <string.h>
  4. #include "SMG.H"

  5. extern void DISPLAY();
  6. extern void CLEAR();
  7. extern void PG_RESET();
  8. extern void TIME_ZHONGDUAN();    // 本來是匯編中的外部定時中斷,現(xiàn)有聲明為外部程序

  9. extern unsigned char LEDMATRIX_DISP_NUM[];
  10. extern unsigned char LEDMATRIX_DISP_RAM[];
  11. extern unsigned char TOUCHED;

  12. extern void LOAD_TKS_GLOBE_VARIES();                //;load TKS varies
  13. extern void LOAD_HXT_REFERENCE();                   //;load HXT varies

  14. #define u8 unsigned char
  15. #define u16 unsigned int
  16. #define BEEP_PORT                        _pa7                                // BEEP 引腳
  17. #define BEEP_PORT_CTRL                _pac7                                // BEEP 引腳控制,為 0 時允許輸出

  18. #define COPY_SEGA   _pb4
  19. #define COPY_SEGB   _pb5
  20. #define COPY_SEGC   _pb6
  21. #define COPY_SEGD   _pb7
  22. #define COPY_SEGE   _pc0
  23. #define COPY_SEGF   _pc1
  24. #define COPY_SEGG   _pc2
  25. #define COPY_SEGDP  _pb3


  26. #define COPY_COM1  _pd3
  27. #define COPY_COM2  _pd2
  28. #define COPY_COM3  _pd0
  29. #define COPY_COM4  _pd1

  30. const u8 dispcode[10]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F};

  31. u8 dispbuff[4];

  32. u8 temp;
  33. char num1;
  34. char num2;
  35. unsigned int My_1MS_COUNTER;

  36. /*
  37. * 初始化中斷設(shè)置
  38. */
  39. void initial()
  40. {
  41.         _tmrc = 0b00010111;
  42.         _tmr = 256-(1000*8/128);        // 8M 主頻
  43.         _te = 1;                                        // 使能定時/ 計數(shù)器中斷
  44.         _emi = 1;                                        // 使能總中斷

  45.         // BEEP
  46.         BEEP_PORT_CTRL = 0;
  47.         BEEP_PORT = 0;
  48. }

  49. void smginit()
  50. {
  51.         //seg口設(shè)置為輸出
  52.         COPY_SEGA=0;
  53.         COPY_SEGB=0;
  54.         COPY_SEGC=0;
  55.         COPY_SEGD=0;
  56.         COPY_SEGE=0;
  57.         COPY_SEGF=0;
  58.         COPY_SEGG=0;
  59.         COPY_SEGDP=0;
  60.        
  61.         _pbc4=0;
  62.         _pbc5=0;
  63.         _pbc6=0;
  64.         _pbc7=0;
  65.         _pcc0=0;
  66.         _pcc1=0;
  67.         _pcc2=0;
  68.         _pbc3=0;

  69.         //com口設(shè)置為輸出
  70.         COPY_COM1=0;
  71.         COPY_COM2=0;
  72.         COPY_COM3=0;
  73.         COPY_COM4=0;
  74.         _pdc3=0;
  75.         _pdc2=0;
  76.         _pdc0=0;
  77.         _pdc1=0;               
  78.        
  79. }

  80. DEFINE_ISR(My_Time_ISR_New, 0x0c)    // 定時器中斷
  81. {
  82.         _clrwdt1();
  83.         _clrwdt2();
  84.        
  85.         smgscan();       //掃描數(shù)碼管,這里隨主循環(huán)不定時的掃描,如果程序復(fù)雜時間保證不了足夠快,
  86.                          //可能會有閃爍,這樣的話,只能開一個時基中斷或放進定時器中斷里,
  87.                
  88.         My_1MS_COUNTER++;
  89.         if(My_1MS_COUNTER>500)
  90.         {
  91.                 My_1MS_COUNTER = 0;
  92. //                smgscan();
  93.                
  94.         }
  95. }

  96.      
  97. void dispnum(u16 num)                //
  98. {
  99.         dispbuff[0]=dispcode[num/1000%10];       
  100.         dispbuff[1]=dispcode[num/100%10];       
  101.         dispbuff[2]=dispcode[num/10%10];       
  102.         dispbuff[3]=dispcode[num%10];       
  103. }


  104. //將一個字節(jié)每一個bit送至相應(yīng)的io
  105. void setseg(u8 num)
  106. {
  107.         mybit a;
  108.         a.data=num;
  109.         if(a.b.b0)COPY_SEGA=1;else COPY_SEGA=0;
  110.         if(a.b.b1)COPY_SEGB=1;else COPY_SEGB=0;
  111.         if(a.b.b2)COPY_SEGC=1;else COPY_SEGC=0;
  112.         if(a.b.b3)COPY_SEGD=1;else COPY_SEGD=0;
  113.         if(a.b.b4)COPY_SEGE=1;else COPY_SEGE=0;
  114.         if(a.b.b5)COPY_SEGF=1;else COPY_SEGF=0;
  115.         if(a.b.b6)COPY_SEGG=1;else COPY_SEGG=0;
  116.         if(a.b.b7)COPY_SEGDP=1;else COPY_SEGDP=0;
  117.        
  118. }

  119. //選擇com口
  120. void setcom(u8 index)
  121. {
  122.         switch(index)
  123.         {
  124.                 case 0:COPY_COM1=1;break;
  125.                 case 1:COPY_COM2=1;break;
  126.                 case 2:COPY_COM3=1;break;
  127.                 case 3:COPY_COM4=1;break;
  128.                 default:break;       
  129.         }               
  130. }

  131. void smgscan()
  132. {
  133.         static u8 index=0;
  134.         COPY_COM1=COPY_COM2=COPY_COM3=COPY_COM4=0;  //消影
  135.         setseg(dispbuff[index]);                    //輸出seg口
  136.         setcom(index);                              //輸出com口
  137.         if(++index>3)index=0;       
  138. }

  139. /*
  140. * 延時函數(shù)
  141. */
  142. void delay(unsigned short ms)
  143. {
  144.         unsigned short i, j;
  145.        
  146.         for (i=0; i<ms; ++i) {
  147.                 for (j=0; j<200; j++) {
  148.                         _clrwdt1();
  149.                         _clrwdt2();
  150.                 }
  151.         }
  152. }


  153. /*
  154. * 使用數(shù)碼管顯示數(shù)字
  155. * pos 為 0 顯示在左側(cè)兩個,為 1 顯示右側(cè)兩個
  156. * temp 為溫度的數(shù)值
  157. */
  158. void dispNumber(unsigned char pos, unsigned char num)
  159. {
  160.         LEDMATRIX_DISP_NUM[pos*2] = num / 10;
  161.         LEDMATRIX_DISP_NUM[pos*2+1] = num % 10;
  162. }

  163. void beep(unsigned short ms)
  164. {
  165.         BEEP_PORT = 1;

  166.         delay(ms);

  167.         BEEP_PORT = 0;
  168. }


  169. void main()
  170. {
  171.         PG_RESET();
  172.         initial();

  173.         beep(200);
  174.        
  175.         smginit();       
  176.         dispnum(1234);
  177.        
  178. //        num1 = 20;
  179. //        num2 = 19;
  180. //
  181. //        dispNumber(0, num1);
  182. //        dispNumber(1, num2);
  183. //        DISPLAY();

  184.         // 初始化按鍵庫
  185.         LOAD_TKS_GLOBE_VARIES();
  186.         BS84C12A_LIBV413_INITIAL();

  187.         while(1) {
  188.                 _clrwdt1();
  189.                 _clrwdt2();

  190. //                TIME_ZHONGDUAN();          // 調(diào)用外部顯示程序,命名為“時間_中斷”
  191. //                BS84C12A_LIBV413();
  192. //               
  193. //                if (SCAN_CYCLEF && ANY_KEY_PRESSF) {
  194. //                        GET_KEY_BITMAP();
  195. //                       
  196. //                        if(DATA_BUF[0] & 0x01) {
  197. //                                // Key1
  198. //                                num1 = num1 + 1 > 99 ? 1: num1 + 1;
  199. //                                beep(100);
  200. //                        }
  201. //                       
  202. //                        if(DATA_BUF[0] & 0x02) {
  203. //                                // Key2
  204. //                                num1 = num1 - 1 < 0 ? 0: num1 - 1;
  205. //                                beep(100);
  206. //                        }
  207. //                       
  208. //                        if(DATA_BUF[0] & 0x04) {
  209. //                                // Key3
  210. //                                num2 = num2 + 1 > 99 ? 1: num2 + 1;
  211. //                                beep(100);
  212. //                        }
  213. //       
  214. //                        if(DATA_BUF[0] & 0x08) {
  215. //                                // Key4
  216. //                                num2 = num2 - 1 < 0 ? 0: num2 - 1;
  217. //                                beep(100);
  218. //                        }
  219. //                       
  220. //                        // 非常重要,加上后不會連續(xù)觸發(fā)按鍵
  221. //                        ANY_KEY_PRESSF = 0;
  222. //                }
  223. //               
  224. //                dispNumber(0, num1);
  225. //                dispNumber(1, num2);
  226. //                DISPLAY();
  227.                
  228.                
  229.        
  230.                 if(TKS_250MSF)       //觸摸庫函數(shù)提供的時間標志位
  231.                 {
  232.                        
  233. //                        temp++;          //250ms加一,為下面的顯示調(diào)用而加
  234. //                        dispnum(temp);
  235.                 }
  236.                
  237.         }
  238. }

復(fù)制代碼
以上代碼的工程文件(僅供參考): lesson_20220915_中斷在C中.zip (86.69 KB, 下載次數(shù): 7)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜网 | 欧美国产一区二区三区 | 久久99精品久久久久久 | 欧美精品一二区 | 精品乱码一区二区 | 成年人在线视频 | 在线看一区二区三区 | 久久久精品一区二区三区 | 暖暖成人免费视频 | 久久久久久国产精品久久 | 中文字幕日韩一区 | 日韩一区二区三区在线 | 国产高清一区二区三区 | 91精品国产综合久久久久 | 久久精品国产a三级三级三级 | 免费三级网站 | 久久草在线视频 | 国产做a爱免费视频 | 色妞av| 欧美成人激情 | 亚洲欧美一区二区三区国产精品 | 超碰人人艹 | www.日日干 | 羞羞的视频免费观看 | 在线天堂免费中文字幕视频 | 欧美一级二级在线观看 | 国产欧美精品一区二区色综合 | 国产成人在线视频播放 | 二区在线视频 | 免费在线观看成人 | 国产欧美精品一区二区 | 久久毛片 | 亚洲天堂久久 | 在线看片福利 | 久久亚洲国产 | 中文字幕人成乱码在线观看 | 亚洲国产精品一区二区三区 | 国产在线精品一区二区 | 久久久久久久久久久久久9999 | www.久草.com | 在线成人免费视频 |