AVRmega16基本程序

上传人:s9****2 文档编号:484493211 上传时间:2023-06-25 格式:DOC 页数:21 大小:152.50KB
返回 下载 相关 举报
AVRmega16基本程序_第1页
第1页 / 共21页
AVRmega16基本程序_第2页
第2页 / 共21页
AVRmega16基本程序_第3页
第3页 / 共21页
AVRmega16基本程序_第4页
第4页 / 共21页
AVRmega16基本程序_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《AVRmega16基本程序》由会员分享,可在线阅读,更多相关《AVRmega16基本程序(21页珍藏版)》请在金锄头文库上搜索。

1、/* 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)

2、 /將寄存器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

3、=0,0,0,0,0,; /5位密碼緩存;/*名稱:ms延時子函數功能:延時指定的ms*/void delayms(int ms) int i,j;for(i=ms;i0;i-) for(j=1722;j0;j-); /8M时改为1141; /12M时为1722; /*名稱:us延時子程序功能:延時指定的us*/void delayus(uchar us) for(us;us0;us-); /12M时单位T为1.45US /*单参数LED 显示硬件连接:数据PORTC-D7D0 段选PORTD-D7D4*/void LEDShow(long int shownum)uchar i,tmp,cu

4、rnum;long int tmpnum;tmp = 0xfb;tmpnum = shownum;for(i=0;i6;i+) /显示的位数为5curnum = tmpnum % 10;tmpnum = tmpnum / 10;PORTD = tmp;PORTC = datecurnum;delayus(1);tmp = (tmp 1) + 0x01; /补上移位造成的最右位为0; /*名稱:七段LED共陽數碼管,在指定数位上显示指定的数,双参数功能:在指定的位置上顯示制定的數;硬件連接:PC口複用控制段選和位選,有2片573進行數據鎖存;*/ void show(uchar dat,ucha

5、r num) /六位七段數碼管顯示程序OK; PORTC=datedat; PORTD|=BIT(0); PORTD&=BIT(0); /送數據; delayus(2); PORTC=0X00; delayus(1); PORTC=duannum; PORTD|=BIT(1); delayus(2); PORTD&=BIT(1); delayus(2); /送選通信號;/*名稱:MCU端口初始化功能:設置MCU端口初始方向為輸出初始狀態為低*/void Gpioinit0() DDRA=0XFF; PORTA=0X00; DDRB=0XFF; PORTB=0X00; DDRC=0XFF; PO

6、RTC=0X00; DDRD=0XFF; PORTD=0X00; /*名稱:MCU端口初始化功能:設置MCU端口初始為輸出初始狀態為高 */void Gpioinit1() DDRA=0Xff; PORTA=0XFF; DDRB=0xff; PORTB=0XFF; DDRC=0xff; PORTC=0XFF; DDRD=0xff; PORTD=0XFF; /*名稱:單端口測試輸入:測試PC的任意端口號07功能:週期改變一個端口的電平*/ void IOtest(uchar num) DDRC|=BIT(num); / while(1) / PORTC|=BIT(num); delayms(50

7、); PORTC&=BIT(num); delayms(50); / /*名稱:按鍵動作檢測子程序。功能:檢測4*4鍵盤是否有鍵按下;硬件連接:PB0PB3為行;PB4pb7為列;*/ uchar key_press() uchar key; DDRB=0XFF; PORTB=0X0F; DDRB=0XF0; delayms(2); /此處要加上適當延時否則讀不到端口信息; key=PINB; key&=0x0f; /按下返回1,否則為0; if(key=0x0f) return 0; else return 1; /* 名稱:4*4矩陣按鍵掃描子程序 功能:掃描一個4*4矩陣案件,比返回相應按鍵值; 硬件連接:PB0PB3為行;PB4pb7為列;*/ uchar keyscan() /4*4鍵盤掃面程序,調試0K; uchar keycode,keynum; do while(key_press()=0); /按鍵是否按下? asm(nop); asm(nop); while(key_press()=1) DDRB=0XFF; /PB0PB3為列,PB4PB7為行;PORTB=0X0F; /列輸出高電平,行輸出低電平;DDRB=0XF0; delayus(10); /延時2毫秒,讀列狀態;keycode=PINB;keycode&=0x0f;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号