|
本帖最后由 51黑電子會(huì)員 于 2020-3-1 10:32 編輯
#include<reg52.h>//包含52單片機(jī)內(nèi)部寄存器頭文件
#define uchar unsigned char // 自定義uchar為unsigned char(即無(wú)符號(hào)字符型數(shù)據(jù),數(shù)據(jù)范圍:0到255。)
#define int int//自定義int為int(即有符號(hào)整數(shù)型數(shù)據(jù),數(shù)據(jù)范圍:-32768到32767。)
sbit K1=P1^0;//位定義EC11旋轉(zhuǎn)編碼器A端引腳K1
sbit K2=P1^1;//位定義EC11旋轉(zhuǎn)編碼器B端引腳K2
sbit K3=P3^4;//位定義EC11旋轉(zhuǎn)編碼器C端引腳K3
int KeyValue;//聲明數(shù)值變量
int ge ,shi,bai,qian;//聲明數(shù)值變量個(gè)位變量、數(shù)值變量十位變量、數(shù)值變量百位變量、數(shù)值變量千位變量、
//uchar qitingflag;
//unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)數(shù)碼管段碼數(shù)字0~9字碼表,低電平點(diǎn)亮數(shù)碼管段碼數(shù)字0~9。
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共陰數(shù)碼管段碼數(shù)字0~9字碼表,高電平點(diǎn)亮數(shù)碼管段碼數(shù)字0~9。
void Delay(int z)//延時(shí)程序
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void ShuMaGuanDisplayKeyValue(int KeyValue)//數(shù)碼管顯示數(shù)值函數(shù)
{
qian=KeyValue/1000;//數(shù)值變量個(gè)位變量值
bai=KeyValue%1000/100;//數(shù)值變量十位變量值
shi=KeyValue%100/10;//數(shù)值變量百位變量值
ge=KeyValue%10;//數(shù)值變量千位變量值
P2=0xfe;//數(shù)碼管千位顯示位
P0=table[qian];//數(shù)碼管千位數(shù)值顯示
Delay(5);//延時(shí)
P2=0xfd;//數(shù)碼管百位顯示位
P0=table[bai];//數(shù)碼管百位數(shù)值顯示
Delay(5);//延時(shí)
P2=0xfb;//數(shù)碼管十位顯示位
P0=table[shi];//數(shù)碼管十位數(shù)值顯示
Delay(5);//延時(shí)
P2=0xf7;//數(shù)碼管個(gè)位顯示位
P0=table[ge];//數(shù)碼管個(gè)位數(shù)值顯示
Delay(5);//延時(shí)
}
void KeyScan()//按鍵掃描函數(shù)
{
if(K1==0)//開始檢測(cè)是否旋轉(zhuǎn)了開關(guān)
{
// delay(10);//消除抖動(dòng)
ShuMaGuanDisplayKeyValue(KeyValue);//延時(shí)
if(K1==0) //確實(shí)是旋轉(zhuǎn)了,進(jìn)行正反轉(zhuǎn)判斷。
{
// delay(10);//消除抖動(dòng)
while(!K1)//等待開關(guān)A端復(fù)位(斷開),防止出現(xiàn)亂加減的現(xiàn)象。
ShuMaGuanDisplayKeyValue(KeyValue);//延時(shí)
if(K2==1)//正轉(zhuǎn),進(jìn)行正轉(zhuǎn)處理。
{
KeyValue=KeyValue+5;//數(shù)碼管數(shù)值每次增加5
}
if(K2==0)//反轉(zhuǎn),進(jìn)行反轉(zhuǎn)處理。
{
KeyValue=KeyValue-5;//數(shù)碼管數(shù)值每次減少5
}
}
}
}
void main()//主函數(shù)
{
while(1)//死循環(huán)
{
KeyScan();//按鍵掃描函數(shù)
// if(qitingflag==1)
ShuMaGuanDisplayKeyValue(KeyValue);//數(shù)碼管顯示數(shù)值函數(shù)
if(KeyValue<0)//判斷數(shù)值變量是否小于0
{
KeyValue=0;//數(shù)值變量置0
}
if(KeyValue>9999)//判斷數(shù)值變量是否大于9999
{
KeyValue=0;//數(shù)值變量置0
}
}
// if(qitingflag==0)//判斷啟停標(biāo)志位變量是否為0
// {
// P2=0Xff;//
// P0=0x00;//
// KeyValue=0;
// }
}
|
-
評(píng)分
-
查看全部評(píng)分
|