Atmega16单片机实用程序
/*********************************************************************
MCU: ATmega16
外部晶振: 8MHz
程序功能: 4*4鍵盤識別,LED七段數碼管顯示,密碼功能模塊,直流電機正反轉控制
AD轉換模塊, 模擬比較器,外部中斷應用,128液晶,C/T0
硬件設計: 參考PROTUES硬件仿真電路
調試: 所有程序主要功能都軟硬件仿真通過,實際使用時要根據需要加入可靠性。
編譯環境: ICC AVR
Design by: wdw
********************************************************************/
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define SET_1(a,b) a|=bit(b) //將寄存器a的第b位置1
#define CLR_0(a,b) a&=~bit(b) //將寄存器a的第b位清0
#program date code:
const date[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,//共陽數據;
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
#program duan code:
const duan[]={0x20,0x10,0x08,0x04,0x02,0x01}; //段選;
char adchannel;
int dispbuf[]={0,0,0,0,0,0,}; //顯示緩存;
uchar securbuf[]={0,0,0,0,0,}; //5位密碼緩存;
/********************************************************************
名稱:ms延時子函數
功能:延時指定的ms
*********************************************************************/
void delayms(int ms)
{
int i,j;
for(i=ms;i>0;i--)
{
for(j=1722;j>0;j--); //8M时改为1141;
} //12M时为1722;
}
/*******************************************************************
名稱:us延時子程序
功能:延時指定的us
********************************************************************/
void delayus(uchar us)
{
for(us;us0;count--)
{
adaver=ad_conv();
adaver+=adaver;
delayms(1);
}
adaver=adaver/8;
delayms(1);
return adaver;
}
/*********************************************************
名稱:AD採樣
功能:採樣AD0的電壓,內部2.56V參考電壓,中斷工作方式
**********************************************************/
void ad0_init()
{
ADMUX=0xc0;
adchannel=0;
ADCSRA=0x98;
DDRA&=~BIT(0);
PORTA&=~BIT(0);
SEI();
}
#pragma interrupt_handler process:15 //interrupt process program
void process()
{
int adcode=0;
ADCSRA&=~BIT(ADIE);
adcode=ADCL;
adcode=(ADCH>3;
y_address=y;
LCD_write_data(x_address,y_address,data|(1>3)-1;x_address++)
{
for(y_address=y1;y_address