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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

想要學(xué)習(xí)單片機(jī)必須要準(zhǔn)備單片機(jī)開發(fā)板一塊,和單片機(jī)C語言版本的書籍,我會把每天錄制視頻的源代碼到頭條,并且錄制相同文章名字視頻到西瓜視頻,如果你再學(xué)習(xí)獨(dú)立按鍵這一塊有不明白的地方可以點開我的頭像,進(jìn)入我的主頁,點擊視頻觀看學(xué)習(xí)。

目前視頻錄制了9個左右,沒學(xué)過的結(jié)合書本,結(jié)合我的視頻,都可以學(xué)會。

話不多說先上今天的仿真效果圖:

然后下面是本仿真圖的源代碼:如果有錯誤,請大神指教。

#include //頭文件,把芯片的數(shù)據(jù)地址編譯成C語言可以調(diào)用的句子。

#define uchar unsigned char //宏定義 把后面的長句 給他們一個新定義,實現(xiàn)同樣的功能。

#define uint unsigned int //宏定義 把后面的長句 給他們一個新定義,實現(xiàn)同樣的功能。

sbit dula=P2^0; //把p2.0給他一個新名字叫dula 用于數(shù)碼管鎖存器段選位置

sbit wela=P2^1;//把p2.1給他一個新名字叫wela 用于數(shù)碼管鎖存器位選的位置

sbit key1=P3^0; //同樣的,給按鍵1和按鍵2分別找兩個串行口來對接。

sbit key2=P3^1;

uchar code table[]={0x3f,0x06,0x5b,0x4f, //定義的一個數(shù)碼管的編碼表。

0x66,0x6d,0x7d,0x07, //陰極數(shù)碼管

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delayms(uint); //延時子程序

void display(uchar,uchar); //顯示子程序

void keyscan(); //獨(dú)立按鍵子程序

uchar num,shi,ge,num1; //定義四個無符號字符

void main() //主程序

{

TMOD=0x01; //中斷確定工作方式,和選擇定時器0

TH0=(65536-45872)/256; //裝初值,

TL0=(65536-45872)%256; //對這一塊不太明白的,可以看我上一個視頻

EA=1; //開啟總的中斷

ET0=1; 開啟定時器/計數(shù)器寄存器中斷 開啟中斷具體定時器中斷

while(1) //循環(huán)式判斷,

{

keyscan(); // 調(diào)用按鍵子程序,對按鍵子程序進(jìn)項不斷地掃描

display(shi,ge);//調(diào)用顯示子程序,對顯示子程序,進(jìn)行不斷地刷新顯示

}

}

void display(uchar shi,uchar ge) //顯示子函數(shù),并且調(diào)用形式參數(shù)

{

P0=0x00; //為了在仿真電路讓P0口沒有其他的數(shù)據(jù)來影響段選顯示的/陰極數(shù)碼管,高電平有效。讓數(shù)碼管變得干凈。

dula=1; //鎖存器開

P0=table[shi]; 把十位的數(shù)字送到P0

dula=0; //鎖存器關(guān)閉// 段選位置

P0=0XFF; //低電平有效,讓位選的位置變得干凈。

wela=1; //位選鎖存器開啟。//低電平有效。

P0=0xfe;//送入位選的 選位。

wela=0; 位選鎖存器關(guān)閉。

delayms(5); /延時5毫秒。

P0=0x00;

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xfd; //選擇數(shù)碼管的第一個位置 來顯示數(shù)字

wela=0;

delayms(5);

}

void delayms(uint xms) //延時子程序

{

uint i,j; //定義兩個無符號字符

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void keyscan() //今天的重點:按鍵掃描子程序

{

if(key1==0) //判斷按鍵1 有沒有按下

{

delayms(10); //延時10毫秒,延時去抖動

if(key1==0) //在判斷一次按鍵1有沒有按下

{

while(!key1); //等待按鍵釋放,如果沒有釋放那么按鍵始終等于0,也就是低電平。按鍵按下去了,

TR0=~TR0; //定時器的開啟與關(guān)閉,開啟 開始計數(shù),關(guān)閉就會暫停

}

}

if(key2==0) //判斷按鍵2是否按下

{

delayms(10); //延時去抖動

if(key2==0) //再次判斷

{

num1=0;// num1是送給數(shù)碼管的數(shù)值,0-60根據(jù)定時器變化的值。

while(!key2);//判斷按鍵2時候松開,沒有松開始終等于低電平。

}

}

}

void T0_time() interrupt 1 //定時器的子程序

{

TH0=(65536-45872)/256; //重裝初值,這一塊如果聽不懂,可以去看上個視頻。

TL0=(65536-45872)%256;

num++;

if(num==20) //定時器每次50毫秒,這里加個20次的循環(huán),用來湊足1秒鐘。

{

num=0;

num1++;

if(num1==60) //給num1進(jìn)行每一秒鐘數(shù)值變化送數(shù)值。

num1=0;

shi = num1/10; //求模的數(shù),送到shi

ge = num1%10;

}

}

總結(jié)

以上是生活随笔為你收集整理的for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。