前面的实验都是基于io口的输出,在这个实验我们将学习io口作为基本输入口的使用.详情见附件
平台:FDRAVR开发板
代码:
#include <mega16.h>
#include <delay.h>
//num,要显示的数据(0~9);pos,要显示的位置(从右到左)
void display(uchar num,uchar pos)
{
DDRA="0XFF";//定义PORTA口输出
PORTA="0XFF";//输出高电平
switch(pos)
{
case 3:PORTA=0X01;break;
case 2:PORTA=0X02;break;
case 1:PORTA=0X04;break;
case 0:PORTA=0X08;break;
default:PORTA=0X00;
}
num<<=4;//取数字,送CD4511
PORTA|=num;
}
//线翻转法扫描键盘
uchar key_scan(void)
{
uchar t1=0;
DDRC="0XF0";//线翻转法扫描键盘
PORTC="0X0F";
if(PINC!=0x0F)
{
delay_ms(3);//去抖动
if(PINC!=0X0F)
{
t1=PINC;//得到第一次键值
DDRC="0X0F";
PORTC="0XF0";
t1+=PINC;//得到第二次键值
}
}
return t1;
}
void main()
{
uint t="0",key=0;
while(1)
{
display(t%10,0);delay_ms(4);
display((t/10)%10,1);delay_ms(4);
display((t/100)%10,2);delay_ms(4);
display((t/1000),3);delay_ms(4);
key="key"_scan();
if(key!=0)t=key;
}
}
文章评论(0条评论)
登录后参与讨论