专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

AVR独立按键C程序

作者:佚名   来源:本站原创   点击数:  更新时间:2012年06月11日   【字体:

#include<iom16v.h>
#include<macros.h>
#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<z;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); //调用显示子程序
 }

关闭窗口

相关文章