您的位置 首页 5G

AVR独立按键C程序

includeiom16vh>includemacrosh>defineucharunsignedchardefineuintunsignedintuintnum1;pragmadata:

#include
#include
#define uchar unsigned char
#define uint unsigned int
uint num1;
#pragma data:code//界说程序存在ROM里边
const table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e
};
/***********************************************/
/*******************延时子程序******************/
/***********************************************/
void delay(uchar z)
{
uchar x,y;
for(x=0;x<10;x++)
for(y=0;y}
/***********************************************/
/*******************显现子程序******************/
/***********************************************/
void xian(uint num)
{
uchar i;
for(i=0;i<50;i++)//显现速度
{
PORTA=table[num/1000];//千位
PORTC&=~BIT(3);
delay(12);
PORTC|=BIT(3);
PORTA=table[num%1000/100];//百位
PORTC&=~BIT(2);
delay(12);
PORTC|=BIT(2);
PORTA=table[num%100/10];//十位
PORTC&=~BIT(1);
delay(12);
PORTC|=BIT(1);
PORTA=table[num%10];//个位
PORTC&=~BIT(0);
delay(12);
PORTC|=BIT(0);
}
}
/***********************************************/
/***************按键按下判别子程序*************/
/***********************************************/
uchar key()
{
uchar i;//界说一个变量来存数
DDRD&=0Xf0;//设置PD IO口为输入方法,高4位不论
PORTD|=0X0f;//设置IO口低4位为输入方法且带上拉电阻,即高电平
i=PIND;//读出IO口的状况
i&=0x0f;//将高4位屏蔽掉,然后得到低四位
if(i!=0x0f)//判别按键是否有按下状况
return 1;//当有按键按下时,状况就不是0x0f,然后回来值1
else
return 0;//假如仍是那个状况,则直接回来0
}
/***********************************************/
/*******************键值处理子程序**************/
/***********************************************/
void keyy()
{
uchar k;//界说一个变量来存数
if(key()==1)//假如键值处理函数为1则阐明有按键按下了
{
delay(1);//消抖一下
if(key()==1)//再次判别一下
{
k=PIND;//读出IO口的状况
k&=0x0f;//相同将它高4位屏蔽掉
switch(k)//来判别详细键值,然后完成各种功用
{
case 0x0e:num1++;//假如低4位第1个键按下了,就将计数器加1
break;//回来
case 0x0d:num1–;//假如低4位第2个键按下了,就将计数器减1
break;
case 0x0b:num1=0;//假如低4位第3个键按下了,就将计数器清0
break;
}
while(key()==1);//按键松手检测,即假如键值处理程序为1则阐明有键按下,
//假如还有键按下,则一向等候。
}
}
}
/***********************************************/
/*******************主程序*********************/
/***********************************************/
void main()
{
DDRA=0xff;//设置PA口为输出
DDRC=0xff;//设置PC口为输出
num1=1234;//计数器初值界说
while(1)
{
keyy();//调用按键处理子程序
xian(num1); //调用显现子程序
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/255366.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部