演示程序:
#include <avr/io.h>
#include <util/delay.h>
#define INT8U unsigned char
#define INT16U unsigned int
//蜂鸣器
#define beep( ) PORTD^= _BV(PD7)
//按键判断有键按下时74922AD向pa7发送高电平
#define key_pressed ((PINA & 0x80) == 0x80)
//获取按键
#define key_no (PINA & 0x0f)
//数码管段码
const INT8U SEG_CODE [ ] =
{
0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,
0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71
};
//发声子程序
void sounder( )
{
INT8U i ;
for (i=0 ; i<100 ; i++)
{
_delay_us(190); beep( );
}
}
int main()
{
DDRA =0X00; PORTA=0XFF;
DDRC=0XFF; PORTC=0X00;
DDRD=0XFF; PORTD=0XFF;
while (1)
{
if ( key_pressed ) //有键按下
{
PORTC = SEG_CODE[key_no];
sounder( );
}
}
}
|