AVRmega16基本程序

  • 格式:doc
  • 大小:108.50 KB
  • 文档页数:21

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

枯藤老树昏鸦,小桥流水人家,古道西风瘦马。夕阳西下,断肠人在天涯。/*********************************************************************

MCU: ATmega16

外部晶振:8MHz

程序功能:4*4鍵盤識別,LED七段數碼管顯示,密碼功能模塊,直流電機正反轉控制AD轉換模塊, 模擬比較器,外部中斷應用,12864液晶,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;us<0;us--);

{

} //12M时单位T为1.45US

}

/********************************************************************

单参数LED 显示

硬件连接:数据PORTC-----D7~D0

段选PORTD-----D7~D4

*********************************************************************/

void LEDShow(long int shownum)

{

uchar i,tmp,curnum;

long int tmpnum;

tmp = 0xfb;

tmpnum = shownum;

for(i=0;i<6;i++) //显示的位数为5

{

curnum = tmpnum % 10;

tmpnum = tmpnum / 10;

PORTD = tmp;

PORTC = date[curnum];

delayus(1);

tmp = (tmp << 1) + 0x01; //补上移位造成的最右位为0;

}

}

/*******************************************************

名稱:七段LED共陽數碼管,在指定数位上显示指定的数,双参数

功能:在指定的位置上顯示制定的數;

硬件連接:PC口複用控制段選和位選,有2片573進行數據鎖存;

*******************************************************/

void show(uchar dat,uchar num) //六位七段數碼管顯示程序OK;

{

PORTC=date[dat];

PORTD|=BIT(0);

PORTD&=~BIT(0); //送數據;

delayus(2);

PORTC=0X00;

delayus(1);

PORTC=duan[num];

PORTD|=BIT(1);

delayus(2);

PORTD&=~BIT(1);

delayus(2);

} //送選通信號;

/************************************************************