- //測試條件:TX-1C開發板
- //杜邦線直接連接ABC端,未接消抖電容
- //正?炻炙傥匆娬`碼
- #include "reg51.h"
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit EC11_A=P3^2;
- sbit EC11_C=P3^3;
- sbit EC11_B=P3^4;
- sbit dula=P2^6; //段
- sbit wela=P2^7; //位
- // 共陰數碼管標準字庫
- unsigned char code table[32]={
- // 0 1 2 3 4 5 6 7 8 9 10A 11B 12C 13D 14E 15F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- // 16黑 17- 18H 19J 20K 21L 22N 23o 24P 25U 26t 27G 28Q 29r 30M 31y
- 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e};
- unsigned char data dis_buf[4]; //顯示緩存
- unsigned char count=50;
- unsigned char traitA,traitB;
- void display()
- {
- static unsigned char i;
- P0=0x00;dula=1;dula=0;
- P0=~(0x01<<i);wela=1;wela=0;
- P0=dis_buf[i];dula=1;dula=0;
- i=++i%4;
- }
- void main()
- {
- EC11_C=0;
- while (1)
- {
- dis_buf[0]=table[17];
- dis_buf[1]=table[count/100%10];
- dis_buf[2]=table[count/10%10];
- dis_buf[3]=table[count%10];
- display();
- //順時針旋轉,每圈進階20
- if(EC11_B && !EC11_A && traitA==0) //第一特征碼,如不符合則立即進行反轉判斷
- {
- traitA=1;
- }
- else if(!EC11_B && !EC11_A && traitA==1)//第二特征碼
- {
- traitA=2;
- }
- else if(!EC11_B && EC11_A && traitA==2)//第三特征碼
- {
- if(count>0)count--;
- traitA=3;
- }
- else if(EC11_B && EC11_A)//第四特征碼
- {
- traitA=0;//清0
- }
- //逆時針旋轉
- if(!EC11_B && EC11_A && traitB==0) //第一特征碼,如不符合則立即進行正轉判斷
- {
- traitB=1;
- }
- else if(!EC11_B && !EC11_A && traitB==1)//第二特征碼
- {
- traitB=2;
- }
- else if(EC11_B && !EC11_A && traitB==2)//第三特征碼
- {
- if(count<250)count++;
- traitB=3;
- }
- else if(EC11_B && EC11_A)//第四特征碼
- {
- traitB=0;//清0
- }
- }
- }
復制代碼 |