|

PIC單片機開發板 C代碼:獨立鍵盤掃描+蜂鳴器響+數碼管
自已寫的,并正常運行
- /*
- 為自已寫的獨立鍵盤掃描+蜂鳴器響+數碼管
- 犯的錯:unsigned密寫成了unsigner一直提示找不到a,b
- PORTD0=1;不行,要寫成PORTD=0x01;才可以,經實驗證得沒有PORTD0沒這個東西,應為RD0=1;
- PORTD=0x03;不是第三個燈亮,而是0000 0011是兩個燈亮
- PORTD=0x8則是0000 1000是第4個燈亮。。。。。出錯因原進制轉化,剛開始寫程序進制轉化混掉了。
- */
- #include <pic.h>
- #define uchar unsigned char
- #define uint unsigned int
- __CONFIG(0x3B31);
- const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //數碼管數組
- uchar key_num;
- void delay(uint x) //延時函數
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
- void scan(); //掃描鍵盤函數 聲明
- void didi(uchar num); //蜂鳴器響 函數 聲明
- void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7); //數碼管顯示 聲明
- //-----------------------------------------------------------------------------------
- void init() //初始化函數
- {
- TRISA=0x00;
- TRISB=0xff;
- TRISC=0X00;
- TRISD=0x00;
- TRISE=0x00;
- PORTC=0Xff;
- PORTD=0x00;
- }
- //-------------------主函數-----------------------------------------------------------
- void main()
- {
- init ();
- while(1)
- {
- scan(); //掃描鍵盤
- disp(key_num,2,3,4,5,6,7,8); //后面的直接傳給數碼管而第一個是幾,我們要用鍵盤來檢測,則第一個變量由key_num
- }
- }
- //-------------------------------------------------------------------------------------
- void didi(uchar num) //蜂鳴器函數,num響幾聲
- {
- uchar di_num; //di_num響幾聲
- for(di_num=num;di_num>0;di_num--)
- {
- RE0=1;
- delay(100);
- RE0=0;
- delay(50);
- }
- }
- void scan()
- {
- if(RB0==0)
- {
- delay(10);
- if(RB0==0)
- {
- didi(1);
- while(!RB0);
- // PORTD=0x01; //若寫成RD0=1;也可,不過呢,會出現燈亮了之后不會滅掉,還得加清零(滅燈)
- key_num=1;
- }
- }
- if(RB1==0)
- {
- delay(10);
- if(RB1==0)
- {
- didi(2);
- while(!RB1);
- // PORTD=0x02;
- key_num=2;
- }
- }
- if(RB2==0)
- {
- delay(10);
- if(RB2==0)
- {
- didi(3);
- while(!RB2);
- // PORTD=0x04;
- key_num=3;
- }
- }
- if(RB3==0)
- {
- delay(10);
- if(RB3==0)
- {
- didi(4);
- while(!RB3);
- // PORTD=0x08;
- key_num=4;
- }
- }
- }
- //---------------------------數碼管顯示函數,數組------------------------------------------------
- void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7)
- {
- PORTD=table[num0];
- PORTA=0x00; //第一個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num1];
- PORTA=0x02; //第二個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num2];
- PORTA=0x04; //第三個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num3];
- PORTA=0x06; //第四個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num4];
- PORTA=0x08; //第五個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num5];
- PORTA=0x0A; //第六個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num6];
- PORTA=0x0c; //第七個數碼管選通
- delay(2); //延時,顯示2ms
- PORTD=table[num7];
- PORTA=0x0e; //第八個數碼管選通
- delay(2); //延時,顯示2ms
- }
復制代碼
|
|