for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零
想要學(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个函数搞定无限层级分类
- 下一篇: css --- [读书笔记] 浮动(f