pic单片机4*4键盘扫描程序
扫描二维码
随时随地手机看文章
#include
__CONFIG(0x1832);
constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};//定义常数0-9的数据表格
volatileunsignedcharresult=0,temp=0,f=0;
volatileunsignedinttotal=0,ge=0,shi=0,bai=0,qian=0,c=1;
voiddelay();//delay函数申明
voidinit();//I/O口初始化函数申明
voidsCAN();//按键扫描程序申明
voiddisplay(unsignedintx);//显示函数申明
//---------------------------------------------------
//主程序
voidmain()
{
init();//调用初始化子程序
while(1)//循环工作
{
scan();
display(result);
}
}
//---------------------------------------------------
//初始化函数
voidinit()
{
ADCON1=0X07;//设置A口为普通I/O口
TRISA=0B00000000;//设置A口高2位为输出,低4位为输入
TRISC=0B11110000;//设置C口高4位为输入,低4位为输出
TRISD=0X00;//设置D口为输出
PORTA=0XFF;
PORTD=0XFF;//先清除所有显示
}
//-----------------------------------------------3---
//按键扫描程序
voidscan(){
PORTC=0xff;
RC3=0;{if(RC4==0)result=1;if(RC5==0)result=2;if(RC6==0)result=3;if(RC7==0)result=4;}
PORTC=0xff;
RC2=0;{if(RC4==0)result=5;if(RC5==0)result=6;if(RC6==0)result=7;if(RC7==0)result=8;}
PORTC=0xff;
RC1=0;{if(RC4==0)result=9;if(RC5==0)result=10;if(RC6==0)result=11;if(RC7==0)result=12;}
PORTC=0xff;
RC0=0;{if(RC4==0)result=13;if(RC5==0)result=14;if(RC6==0)result=15;if(RC7==0)result=16;}
//if(temp!=result){f++;if(f==1)qian=1000*result;if(f==2)bai=100*result;if(f==3)shi=10*result;if(f==4)ge=result;}if(f==4)while(1){total=ge+shi+bai+qian;display(total);}
}
//----------------------------------------------------------
//显示程序
voiddisplay(unsignedintx)//电压显示函数
{
unsignedintg,s,b,q;//定义6个临时变量
//temp=result;c=1;
q=x/1000;
b=x%1000/100;//求显示的千位
s=x%100/10;//求显示的百位
g=x%10;//求显示的十位
PORTD=TABLE[q];//显示一个小数点
PORTA=0B11111110;//RA0输出低电平,点亮千位显示
delay(1);
PORTD=TABLE[b];//查表得百位显示的代码
PORTA=0B11111101;//RA1输出低电平,点亮百位显示
delay(1);//延时一定时间,保证显示亮度
PORTD=TABLE[s];//查表得十位显示的代码
PORTA=0B11111011;//RA2输出低电平,点亮十位显示
delay(1);//延时一定时间,保证亮度
PORTD=TABLE[g];//查表得十位显示的代码
PORTA=0B11110111;//RA3输出低电平,点亮十位显示
delay(1);//延时一定时间,保证亮度
PORTD=0xff;
}
//------------------------------------------------------------------
//延时程序
voiddelay()//延时程序
{
inti;//定义整形变量
for(i=0x100;i--;);//延时
}