日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51定时器控制4各led,使用回调函数机制

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51定时器控制4各led,使用回调函数机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序轉載自51hei,經過自己的實際驗證,多了一種編程的思路技能,回調函數的基本思想也是基于事件機制的,哪個事件來了, 就執行哪個事件。

程序中,最多四個子定時器,說明51的處理速度是不夠的,在中斷中添加過多的代碼會定時不準確。自己實驗了5個,第五個想要定時4秒,實際差不多有5秒了,因此中斷里面是代碼越少越好~~

1 #include<reg52.h> //頭文件 2 #define MY_TIMER_MAX (4) //最多四個定時器 3 #define NULL (0) 4 5 typedef void (*pFun)(void); //callback 函數指針類型 6 typedef struct myTimer 7 { 8 char on; //開關 9 char is_period; //是否周期循環 10 unsigned int time_out; //定時時間,單位ms 11 unsigned int count; //定時計數用 12 } 13 MY_TIMER; 14 15 pFun callback[MY_TIMER_MAX] = {NULL}; //定時器回調函數數組 16 MY_TIMER myTimerList[MY_TIMER_MAX] = {0}; //定時器結構數組 17 int gMyTimerMessage[MY_TIMER_MAX] = {0}; //定時器消息數組 18 19 sbit LED1=P2^0; 20 sbit LED2=P2^1; 21 sbit LED3=P2^2; 22 sbit LED4=P2^3; 23 sbit LED5=P2^4; 24 25 #define ALL_ON {LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;} //燈全開 26 27 //創建定時器,簡化版本。 28 int CreatTimer(int index,unsigned short int time_out,char is_period,pFun callbackFun) 29 { 30 if(index >= MY_TIMER_MAX) return -1; 31 myTimerList[index].on = 1; 32 myTimerList[index].is_period = is_period; 33 myTimerList[index].time_out = time_out; 34 myTimerList[index].count = 0; 35 callback[index] = callbackFun; 36 return index; 37 } 38 39 //四個LED控制函數,on初始是0,第一次調用on變為1,是關燈。 40 void led_1_ctrl(void) 41 { 42 static char on = 0; 43 on = !on; 44 LED1 = on; 45 } 46 void led_2_ctrl(void) 47 { 48 static char on = 0; 49 on = !on; 50 LED2 = on; 51 } 52 void led_3_ctrl(void) 53 { 54 static char on = 0; 55 on = !on; 56 LED3 = on; 57 } 58 void led_4_ctrl(void) 59 { 60 static char on = 0; 61 on = !on; 62 LED4 = on; 63 } 64 65 void led_5_ctrl(void) 66 { 67 static char on = 0; 68 on = !on; 69 LED5 = on; 70 } 71 72 void Init_Timer0(void) //初始化定時器0 73 { 74 TMOD=0x01; //定時器0,使用模式1,16位定時器 75 TH0=(65536-1000)/256; //給定初值 76 TL0=(65536-1000)%256; 77 EA=1; //打開總中斷 78 ET0=1; //打開定時器中斷 79 TR0=1; //開定時器 80 } 81 82 void main(void) //主函數 83 { 84 unsigned int i; 85 86 ALL_ON; 87 88 CreatTimer(0,250,1,led_1_ctrl); 89 CreatTimer(1,500,1,led_2_ctrl); 90 CreatTimer(2,1000,1,led_3_ctrl); 91 CreatTimer(3,2000,1,led_4_ctrl); 92 //CreatTimer(4,4000,1,led_5_ctrl); 93 94 Init_Timer0(); //初始化定時器0 95 while(1) 96 { 97 for(i = 0; i<MY_TIMER_MAX; ++i) 98 { 99 if(gMyTimerMessage[i]) //定時器消息來到,啟動。 100 { 101 gMyTimerMessage[i] = 0; //消息清除 102 if(callback[i] != NULL) 103 { 104 (*callback[i])(); //調用回調函數 105 } 106 } 107 } 108 } 109 } 110 111 //定時器中斷函數,1ms 定時。 112 void Timer0_isr(void) interrupt 1 113 { 114 unsigned int i = 0; 115 116 117 TH0=(65536-1000)/256;//重新賦值 1ms 118 TL0=(65536-1000)%256; 119 120 EA = 0; 121 for(i = 0; i<MY_TIMER_MAX; ++i) 122 { 123 if(myTimerList[i].on) //如果定時開啟 124 { 125 ++(myTimerList[i].count); //計數++ 126 if(myTimerList[i].count >= myTimerList[i].time_out) //定時到 127 { 128 gMyTimerMessage[i] = 1; //發消息,在main函數中會用到 129 if(myTimerList[i].is_period) //是否周期循環 130 { 131 myTimerList[i].count = 0; //計數重置 132 } 133 else 134 { 135 myTimerList[i].on = 0; //關掉定時器 136 } 137 } 138 } 139 } 140 EA = 1; 141 }

?

轉載于:https://www.cnblogs.com/CodeWorkerLiMing/p/10742313.html

總結

以上是生活随笔為你收集整理的51定时器控制4各led,使用回调函数机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 香蕉一区二区三区四区 | 国产精品三级在线观看无码 | 黄色av网站在线播放 | 肉大榛一进一出免费视频 | 日本三区视频 | 黑鬼大战白妞高潮喷白浆 | 中文字幕乱码在线观看 | 精品日韩在线视频 | a v视频在线观看 | 久久综合99| 麻豆成人久久精品一区二区三区 | 欧美国产成人精品一区二区三区 | 十八禁毛片 | 喷水少妇 | 午夜影剧院 | 国产视频在线观看免费 | 456av| 美女av网站| 精品成人av一区二区在线播放 | 丰满人妻综合一区二区三区 | 手机在线看永久av片免费 | 亚洲一级免费毛片 | av操操操| 亚洲精品乱码久久久久久 | 欧美成人资源 | 国产精品无码免费播放 | 青草精品视频 | 精品国产乱码 | 美女视频一区二区 | 99热这里只有精品4 精品国产黄色 | 无码人妻久久一区二区三区 | 国产精品一区免费观看 | 日韩一区二区视频在线播放 | 麻豆一区二区三区精品视频 | 韩国av免费观看 | 黄色福利网站 | 极品色影视 | 欧美另类极品videosbest最新版本 | 国产精品久久无码一三区 | 视频在线观看免费 | 真实乱视频国产免费观看 | 日韩 欧美| 国产美女主播在线观看 | 一区二区在线观看视频 | 91美女片黄在线观看游戏 | 国产理论在线 | 成人性视频在线 | 国产又黄又嫩又滑又白 | 精品国产一区二区三区性色av | 亚洲欧美在线看 | 美女被草网站 | 午夜激情男女 | 97视频网站 | 精品人妻一区二区三区三区四区 | 久久成人亚洲 | 久青草影院 | 99热黄色 | 麻豆亚洲 | 亚洲高清色 | 国产爽视频| 久久人人爽人人爽人人片 | 黄片毛片 | 高清av一区二区三区 | 欧美一级片在线观看 | 久久久蜜桃 | 国产精品高清网站 | 欧美国产三级 | 被灌满精子的波多野结衣 | 欧美色图3p| 天天想夜夜操 | av不卡高清| 中出在线 | 51ⅴ精品国产91久久久久久 | 亚洲色图欧美日韩 | 先锋资源国产 | 最好看的2019年中文在线观看 | 99热这里有精品 | 久久三 | 欧美成人午夜剧场 | 精品自拍偷拍视频 | 超碰成人久久 | 亚洲图片88| 97涩涩网| 亚洲精品97久久中文字幕 | www.狠狠干 | 五月婷婷深深爱 | 中文字幕免费高清网站 | 青草青草久热 | 日本不卡视频一区二区 | 69社| 国产成人无码精品 | 国产美女被草 | 国产精品99久久久久久动医院 | 亚洲色婷婷久久精品av蜜桃 | 少妇精品久久久久www | 57pao国产成永久免费视频 | 欧美大片一区二区三区 | 男人和女人插插 | av在线.com |