|

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
- }
复制代码
|
|