標(biāo)題:
ATMEGA16A 按鍵數(shù)碼管
[打印本頁]
作者:
夏宇閃擎
時間:
2019-7-24 12:26
標(biāo)題:
ATMEGA16A 按鍵數(shù)碼管
* 【編譯環(huán)境】: ICCAVR
* 【函數(shù)功能】: 按鍵K5 K6 實現(xiàn)數(shù)碼管加減1 初始值 8888
* 【晶 振】: 8M
* 【芯 片】: ATMEGA16A
* */
/******************************************************************************/
#define uchar unsigned char
#define uint unsigned int
#include <iom16v.h>
#define Set_Bit(val, bitn) (val |=(1<<(bitn)))
#define Clr_Bit(val, bitn) (val&=~(1<<(bitn)))
#define Get_Bit(val, bitn) (val &(1<<(bitn)) )
uchar disbuf[4]={0,0,0,0};
uchar discode[10]={ 0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //段碼表
uchar disbit[4] ={ 0xFE, 0xFD,0xFB,0xF7}; //選通值
uchar Key_Up;
uchar Key_Down;
static uint k=8888;
/******************************************************************************/
//延時函數(shù)
/******************************************************************************/
void delay(void)
{uint i;
for(i=0;i<500;i++);
}
/******************************************************************************/
/******************************************************************************/
//顯示函數(shù)
/******************************************************************************/
void Display(void)
{ uchar i;
for(i=0;i<4;i++)
{
PORTB=discode[disbuf[i]];
PORTA=disbit[i];
delay();
PORTA=0xff;
}
}
/******************************************************************************/
//顯示數(shù)據(jù)處理
/******************************************************************************/
void Process(uint i,uchar *disbuf)
{ disbuf[0]=i/1000;
i=i%1000;
disbuf[1]=i/100;
i=i%100;
disbuf[2]=i/10;
i=i%10;
disbuf[3]=i;
}
/******************************************************************************/
//按鍵處理子程序
/******************************************************************************/
void Get_Key(void)
{
if(Get_Bit(PINA,4)==0) //PA4 按鍵處理函數(shù)
{
Display();
Display();
Display();
Display();
while(!(Get_Bit(PINA,4)))//等待按鍵松開
{
Display();
}
k++;
if(k>9999)k=0;
Process(k,disbuf);
}
if(Get_Bit(PINA,5)==0) //PA5 按鍵處理函數(shù)
{
Display();
Display();
Display();
while(!Get_Bit(PINA,5)) //等待按鍵松開
{
Display();
Display();
}
k--;
if(k==65535)k=9999;
Process(k,disbuf);
}
}
void main (void)
{
DDRA|=1<<0|1<<1|1<<2|1<<3|0<<4|0<<5;//設(shè)置PA0,PA1,PA2為輸出,PA4,PA5為輸入
PORTA=0x00;
DDRB=0xFF;
PORTB=0xFF;
Process(k,disbuf);
while(1)
{
Get_Key();
Display();
}
}
作者:
admin
時間:
2019-7-24 14:32
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1