亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機LED調光程序,狀態機按鍵處理,效果比較好
[打印本頁]
作者:
lids
時間:
2017-4-21 13:38
標題:
單片機LED調光程序,狀態機按鍵處理,效果比較好
用狀態機處理按鍵,終于把這個功能實現了;實驗板上測試通過。
/* ********************************************************************************************* */
// 處理器 : STC89C52RC
// 編譯環境 : Keil4 C51
// 系統時鐘 : 11.0592MHZ
// 簡單描述 : 1個獨立按鍵,短按開關LED燈,長按調光,如果按住按鍵不放,LED亮度從 亮-->暗,暗-->亮,循環。
/* ********************************************************************************************* */
#include<reg52.h>
typedef unsigned char uChar8;
typedef unsigned int uInt16;
/*初始狀態 確認狀態 單擊狀態 連發狀態 */
typedef enum KeyState{StateInit,StateAffirm,StateSingle,StateRepeat};//鍵值狀態值
uChar8 pwm_led_val = 0; //LED占空比值 0-20 0最亮
uChar8 pwm_t; //周期
sbit KEY1 = P3^0; //定義按鍵端口
sbit LED = P1^0; //定義LED燈端口
void Timer0Init(void)
{
TMOD |= 0x02; //設置定時器0工作模式2,8位自動重裝
TH0 = 240; //定時器裝初值
TL0 = 240; //11.0592M晶振下占空比最大比值是20,輸出2880HZ
EA = 1; //開總中斷
ET0 = 1; //開定時器0中斷
TR0 = 1; //啟動定時器0
}
void Timer1Init(void)
{
TMOD |= 0x10; // 設置定時器1工作模式1,16位計數器
TH1 = 0xDC; // 賦初始值
TL1 = 0x00; // 11.0592M晶振下,定時10ms
TR1 = 1; // 啟動定時器1
}
/* ***************************************************** */
// 函數名稱: Init()
// 函數功能: 初始化
// 入口參數: 無
// 出口參數: 無
/* ***************************************************** */
void Init() //初始化
{
Timer0Init();
Timer1Init();
}
//定時器0中斷
void timer0() interrupt 1
{
pwm_t++;
if(pwm_t == 20)
{
pwm_t = 0; LED = 1;
}
if(pwm_led_val == pwm_t)
LED = 0;
}
/* ***************************************************** */
// 函數名稱:KeyScan(void)
// 函數功能:掃描按鍵
// 入口參數:無
// 出口參數:鍵值(num)
/* ***************************************************** */
void KeyScan(void)
{
static uChar8 KeyStateTemp1 = 0; //按鍵狀態臨時存儲值1
static uChar8 KeyTime = 0; //按鍵延時時間
bit KeyPressTemp1; //按鍵是否按下存儲值1
bit falg; //亮度標志
KeyPressTemp1 = KEY1; //讀取I/O口的鍵值
switch(KeyStateTemp1)
{
case StateInit: //按鍵初始狀態
if(!KeyPressTemp1) //當按鍵按下,狀態切換到確認態
KeyStateTemp1 = StateAffirm;
break;
case StateAffirm: //按鍵確認態
if(!KeyPressTemp1)
{
KeyTime = 0;
KeyStateTemp1 = StateSingle; //切換到單次觸發態
}
else KeyStateTemp1 = StateInit; //按鍵已抬起,切換到初始態
break;
case StateSingle: //按鍵單發態
if(KeyPressTemp1) //按下時間小于1s
{
KeyStateTemp1 = StateInit; //按鍵釋放,則回到初始態
TR0 = !TR0;
LED = 1; //關閉LED
}
else if(++KeyTime > 100) //按下時間大于1s(100*10ms)
{
KeyStateTemp1 = StateRepeat; //狀態切換到連發態
KeyTime = 0;
}
break;
case StateRepeat: //按鍵連發態
if(KeyPressTemp1)
KeyStateTemp1 = StateInit; //按鍵釋放,則進初始態
else //按鍵未釋放
{
if(++KeyTime > 10) //按鍵計時值大于100ms(10*10ms)
{
KeyTime = 0;
if(falg == 0)
{
if(pwm_led_val < 20)
{
pwm_led_val++; //亮度變暗
if(pwm_led_val==20)
falg = 1;
}
}
if( falg ==1 )
{
if(pwm_led_val > 0)
{
pwm_led_val--; //亮度變亮
if(pwm_led_val==0)
falg = 0;
}
}
}
break;
}
break;
default: KeyStateTemp1 = KeyStateTemp1 = StateInit; break;
}
}
/* ***************************************************** */
// 函數名稱:ExecuteKeyNum(void)
// 函數功能:按鍵值來執行相應的動作
// 入口參數:無
// 出口參數:無
/* ***************************************************** */
void ExecuteKeyNum(void)
{
if(TF1) //定時器1溢出
{
TF1 = 0;
TH1 = 0xDC;
TL1 = 0x00;
KeyScan();
}
}
void main()
{
Init(); //首先初始化各數據
while(1) //進入主程序大循環
{
ExecuteKeyNum(); //不停的檢測按鍵是否被按下
}
}
作者:
nnlibing
時間:
2017-4-24 06:46
學習 了
作者:
comer
時間:
2017-9-7 11:05
剛接觸單片機,請多多關照
作者:
3760609865
時間:
2017-9-9 11:33
學習學習狀態機按鍵,感謝樓主的分享。
作者:
nanning321
時間:
2017-12-26 16:04
再加上掉電模式就完美了 ,誰改好我10RMB以上
作者:
faridzled
時間:
2017-12-26 18:09
thanks for sharing
作者:
wuxishun
時間:
2017-12-30 21:26
樓主可以提供下程序包嗎
作者:
高低都不調
時間:
2017-12-31 23:00
這個不錯,正想做個調光臺燈
作者:
lids
時間:
2018-1-2 10:08
wuxishun 發表于 2017-12-30 21:26
樓主可以提供下程序包嗎
完整程序就帖子里面的,你自己復制就可以
作者:
lin07555
時間:
2018-1-31 18:05
不錯,我什么時候才達到這樣的水平
作者:
都市郎
時間:
2018-2-2 04:24
好資料,有實用價值!
作者:
lwz08
時間:
2018-2-2 15:38
不錯。學習中。
作者:
daiya
時間:
2018-2-16 19:45
大哥,好厲害!
作者:
chaoself
時間:
2018-2-17 11:15
謝謝樓主分享
作者:
zhangmos
時間:
2018-2-17 14:54
很好用,謝謝樓主,辛苦了!
作者:
lijunn1
時間:
2019-1-14 19:56
狀態機處理好
作者:
qxdqx
時間:
2019-2-22 12:57
今天測試了一下.效果很好!謝謝分享!
作者:
迷戀520冬天
時間:
2019-4-8 10:51
這個確實好
作者:
jldqc
時間:
2019-4-20 20:15
學習學習
作者:
ASDZXCAS
時間:
2019-5-25 10:39
請問有原理圖嗎
作者:
myfff
時間:
2019-6-25 11:15
老哥有沒有仿真圖,求發到2621904761@qq.com郵箱,謝謝
作者:
川蜀浪子
時間:
2020-11-21 17:35
學習了,想做LED燈的PWM調光,但不知道怎樣編程。
作者:
15256089239
時間:
2020-11-22 15:23
為什么我復制代碼,在keil4中編譯失。
作者:
bhjyqjs
時間:
2020-11-24 15:33
無標題.jpg
(482.17 KB, 下載次數: 90)
下載附件
2020-11-24 15:30 上傳
IO口操作仿真.rar
(15.05 KB, 下載次數: 14)
2020-11-24 15:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhangleixbyl
時間:
2020-12-16 16:30
剛試驗了好用,感謝。
作者:
zhangleixbyl
時間:
2021-2-17 17:53
這個可以控制可控硅嗎
作者:
zhangleixbyl
時間:
2021-2-27 04:07
這個能控制可控硅調壓嗎
作者:
xiaobing0522
時間:
2021-2-27 22:14
好,好好學習了,學習了 。這個資料非常實用
作者:
我會想你的
時間:
2021-6-3 21:41
一直找類似的按鍵
作者:
dj3365191
時間:
2024-11-22 17:36
這個程序我搭建電路試了一下,功能正常,但是LED一上電就亮,沒有使用價值,怎樣改成一上電是不亮的就好了,哪位高手指導一下,謝謝!
作者:
ydq2015ok
時間:
2024-12-24 23:06
一直找類似的按鍵;;這個資料非常實用
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1