原创 avr单片机 数码管动态显示 实验(四)

2008-5-12 12:39 4866 9 9 分类: MCU/ 嵌入式

点击下载


前面的实验都是基于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;
    }
}   


 


 


 


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条