本帖最后由 51黑電子會員 于 2019-12-9 16:52 編輯
#include<reg51.h>//單片機頭文件
#define SMG P0//自定義單片機P0組端口為變量SMG
#define uchar unsigned char//自定義變量uchar為unsigned char
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數碼管段碼顯示0~9數字的數組
int num;//共陽數碼管段碼數組下標數字變量
sbit AA = P1^0;//接編碼器A端
sbit BB = P1^1;//接編碼器B端
void delay(uchar z)//延時函數
{
uchar i,j;
for(i = 0; i < z; i++)
for(j = 0; j < 120; j++);
}
void main()//主函數
{
while(1)//死循環
{
if(num<0)//判斷共陽數碼管段碼數組下標數字變量是否小于0
{
num=9;//共陽數碼管段碼數組下標數字變量變為9
}
if(num>9)//判斷共陽數碼管段碼數組下標數字變量是否大于9
{
num=0;//共陽數碼管段碼數組下標數字變量變為0
}
SMG=table[num];//共陽數碼管段碼顯示0~9數字的數組賦值給變量SMG,相當于賦值給單片機P0組端口,從而讓數碼管顯示出0~ 9數字。
if(AA == 0)//開始檢測是否旋轉了開關
{
delay(10);//消除抖動
if(AA == 0) //確實是旋轉了,進行正反轉判斷。
{
delay(10);//消除抖動
while(!AA);//等待開關A端復位(斷開),防止出現亂加減的現象。
if(BB == 1)//正轉,進行正轉處理。
{
num++;//數碼管數值增加
}
if(BB == 0)//反轉,進行反轉處理。
{
num--;//數碼管數值減少
}
}
}
}
}
|