ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:177.17KB ,
资源ID:23121258      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23121258.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(avr单片机的应用.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

avr单片机的应用.docx

1、avr单片机的应用LCD显示源程序:SLAVR744.ASMLCD显示器1602AT(S)R简介:LED显示器模块1602AT(S)R为2X16字符。含有5*10或5*7点LCD共12*16=192种CG显示字形及双组8个自由利用软件设定(CGRAM)的5*8图点字形,因此除内部固定192种字形外,再加上此16个可自由设定图字型等共计208种字图形如字符代码表所示。因5*8个点输入设定故5个点仅占用D4-D0的5位,而D7-D5则可为任意值,第八行值为游标地址,因此共八行占八个地址组成一个字形及标示游标地址,总共八个设定字图形,因此占有8*8=26个地址,CG地址设定值为D5-D0。LCD引脚

2、功能说明1. GND:电源地,0V;2. VCC电源+5V;3. VLC:LCD驱动电压0V-5V对比度调节电压;4. RS寄存器选择信号;RS=0:指令寄存器IR写入(WRITE);(1) 忙(BUSY FLAG)读取(READ);(2) 地址计数器(ADDRESS COUNTER)AC读取(READ); RS=1:数据寄存器(DATA REGISTER)读取及写人(READ/WRITE);5. R/W读/写控制信号(READ/WRITE):R/W=1读取(READ)、R/W=0写入(WRITE);6. E(ENABLE)片使能信号,作写数据控制,下降沿触发;714脚为DB0DB7八位数据总

3、线,三态双向,若作为4位传送时应令: DL=0,以DB4-DB7作传送将8位数据分二次传送;15. 一般不用(空),如有背光LED,则接VCC;16. 一般不用(空),如有背光LED,则接GND;LCDTC1602 CG RAM字形结构设定输入表字形码(DD RAM数据CG RAM地址字形图样(CG RAM)数据7 6 5 4 3 2 1 0高位 低位 5 4 3 2 1 0上位 下位7 6 5 4 3 2 1 0上位 (5*7字形) 下位0 0 0 0 * 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 * * * 1

4、1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1* * * 0 0 0 0 00 0 0 0 * 0 0 1 0 0 0 0 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 0 1 1 1 * * * 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0* * * 0 0 0 0 00 0 0 0 * 1 1 1 0 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 1* * *LC

5、D指令表指 令 指 令 码说 明执行周期fosc=250KhzRSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001请除屏幕,置AC为0,光标回位1.64ms光标返回000000001*DDRAM地址为0,显示回原位,DDRAM内容不变1.64ms设置输入方法00000001I/DS设置光标移动方向并指定显示是否移动40s显示开关0000001DCB设置显示开或关(D),光标开关(C),光标所在字符闪烁(B)40s移位000001S/CR/L*移动光标及整体显示,同时不改变DDRAM内容40s功能设置00001DLNF*设置接口数据(DL)、显示行数(L)、字符字体

6、(F)40sCGRAM地址设置0001 ACG 设置CGRAM地址,设置后发送接收数据40sDDRAM地址设置001 ADD设置DDRAM地址,设置后发送接收数据40s忙标志/读地址计数器01BF AC读忙标志(BF)标志正在执行内部操作并读地址计数器内容40sCGRAM/DDRAM数据写10 写数据从CGRAM或DDRAM写数据40sCGRAM/DDRAM数据读11 读数据从CGRAM或DDRAM读数据40sI/D=1:增量方式; I/D=0:减量方式S=1:移位S/C=1:显示移位; S/C=0光标移位R/L=1:右移; R/L=0 左移DL=1:8位; DL=0:4位N=1:2行; N=

7、0:1行F=1:5*10字体; F=0:5*7字体BF=1:执行内部操作; BF=0:可接收指令DDRAM:显示数据RAMCGRAM:字符发生器RAMACG:CGRAM地址ADD:DDRAM地址及光标地址AC:地址计数器用于DDRAM和CGRAM执行周期随主频改变而改变例如当fcp或fosc=270khz时:40s x250/270=37s源程序:SLAVR744.ASM.include8515def.inc.def temp=r16.def temp1=r17.def temp2=r18.def cnt=r20.def cnt1=r21.org $0000 rjmp reset.org $0

8、030reset: ldi temp,low(ramend) ;设置堆栈指针。 out spl,temp ldi temp,high(ramend) out sph,temp ldi temp,$ff ;设置D口输出,B口作输入。 out ddrd,temp out portd,temp clr temp out ddrb,temp out portb,temp rcall syset ;调用系统设置。lp8: clr cnt1 ;循环程序。lp81: clr cnt ldi temp1,$80 ;设置第一行显示寄存器起址。(第二行为$a8) rcall contdlp82: cp cnt1,

9、cnt brne lp83 ldi temp1,$38 ;字形8的代码为$38。lp84: rcall writd inc cnt cpi cnt,$10 brne lp82 ldi temp,$55 ;设置延时常数。 rcall delay inc cnt1 cpi cnt1,$10 brne lp81 rjmp lp8lp83: ldi temp1,$20 rjmp lp84CONTD: LDI TEMP,0B00110000 ;写控制字入LCD中 OUT PORTD,TEMP RCALL DELT3 CBI PORTD,$05 ;使E=0 ,LCD片选有效 RCALL DELT3 SBI

10、 PORTD,$05BUSYY: WDR SBIC PINB,$07 ;读取DB7=PINB7是否为0,为0则非忙跳过一行 RJMP BUSYY ;DB7=1为忙,跳回BUSYY再等待DB7=0以写入 LDI TEMP,0b00100000 ;写入数据写入控制字 OUT PORTD,TEMP RCALL DELT3 ;延时以免AVR速度太快而使LCD无法工作 LDI TEMP,$ff ;设定B口为输出 OUT DDRB,TEMP OUT PORTB,TEMP1 ;要写入LCD的数据TEMP1输出到PORTB WDR CBI PORTD,$05 RCALL DELT3 LDI TEMP,0B00

11、111000 OUT PORTD,TEMP CLR TEMP OUT DDRB,TEMP OUT PORTB,TEMP RET WRITD: LDI TEMP,0B00110000 ;写数据入LCD中 OUT PORTD,TEMP RCALL DELT3 ;延时以免AVR速度太快而使LCD无法工作 CBI PORTD,$05 ;使E=0, LCD片选有效 RCALL DELT3 SBI PORTD,$05BUZY1: WDR SBIC PINB,$07 ;读取DB7=PINB7是否为0,为0则非忙跳过一行 RJMP BUZY1 ;DB7=1为忙,跳回BUSY1再等待DB7=0以写入 LDI T

12、EMP,0B00101000 ;写控制字入LCD中 OUT PORTD,TEMP OUT PORTB,TEMP1 ;要写入LCD的数据TEMP1输出到PORTB LDI TEMP,$ff ;设定B口为输入 OUT DDRB,TEMP CBI PORTD,$05 ;使E=0, LCD片选有效 RCALL DELT3 ;延时以免AVR速度太快而使LCD无法工作 LDI TEMP,0B00111000 ;写控制字入LCD中 OUT PORTD,TEMP RCALL DELT3 CLR TEMP ;PORTB为输入 OUT DDRB,TEMP OUT PORTB,TEMP ;PORTB为三态输入 RE

13、T syset: ldi temp1,$01 ;清屏设定 rcall contd ldi temp,$50 ;设置时间常数 rcall delay ldi temp1,$38 ;2行 5*7显示设定 rcall contd ldi temp1,$06 ;自动增量,显示不移位 rcall contd ldi temp1,$0c ;字形开关ON,光标开关OFF rcall contd retDELT3: ldi temp2,$24 DT111: wdr dec temp2 brne dt111 retdelay: ;延时子程序略7.4.5 LED电脑时钟源程序:SLAVR745.ASM硬件连接见:

14、3.3 AVR单片机开发下载实验器;本程序若直接按shife+exec即从00:00:00开始计时。 本程序下载后(或上电后), LED显示00:00:00等待设置,请您从键盘上输入时、分、秒,要求输入位由小数点作光标提示,输入正确时间后,按执行键(SHIFT+EXEC)执行,电脑钟开始计时。1. 请你如何修改程序,可当秒表用?2. 又如何修改程序到点发出报时声? ;本程序在SL-AVR编程开发实验器上通过,由六位LED显示 ;本程序采用T0,1/1024分频, 设定一次中断为25MS,40次中断为1秒。.include8515def.inc .def TEMP =r16 .def TEMP1

15、 =r17 .def temp2 =r18 .def temp3 =r19 .def CNT =r20 .def SCNN =r21 .def KSNI =r22 .def SCNDP =r23 .def KEYN =r24 .def cnt1 =r25 .def hour=r24 .def minute=r22 .def second=r21 .equ label=$0f00 ;字形表首址.org $0000 rjmp reset.org $007intt0: ldi temp,104 ;因25ms内差40us故补上40/(1/8)即320个CK。bu: dec temp ;因中断需4CK这

16、样:4+104*(1+2)+1+1+1+1=320。 brne bu nop inc cnt1 ;cnt1计数40次为1秒钟。 ldi temp,256-195 ;计数(256-195)次才产生1次中断。 out tcnt0,temp ;CK/1024分频,这样一次中断需25ms。 rjmp recog.org $030reset: ldi temp,low(ramend) ;设置堆栈指针。 out spl,temp ldi temp,high(ramend) out sph,temp clr r2 ;清工作寄存器。 clr r3 clr r4 clr r5 clr r6 clr r7 clr

17、 zh clr xh clr yh clr keyn clr second clr minute clr hour clr cnt clr yh ldi temp,$80 mov r8,temp ;R8=$80 ldi yl,$60 ;设置显示內存地址指针Y为$0060. rcall disram ;调用DISRAM。 ld temp,y ldi temp1,$80 add temp,temp1 st y,temp scanad: ldi temp,$07 ldi yl,$60 scann: rcall scan1 ;调用键扫显示子程序SCAN1。 brts scann scank: rcal

18、l scan1 brtc scank rcall scan1 scans: nop cpi keyn,$10 ;KEYN=$10转EXEC。 brcc exec rcall wraddram ;调用WRADDRAM。 dec temp ;TEMP减1。 cpi temp,$01 brne scann ;TEMP=1则转SCANN rjmp scanadexec: mov temp1,r7 ;把r7,r6的两个十进制换成一个十六进制入hour中 mov temp,r6 rcall dechex mov hour,temp mov temp1,r5 ;把r5,r4的两个十进制换成一个十六进制入mi

19、nute中 mov temp,r4 rcall dechex mov minute,temp mov temp1,r3 ;把r3,r2的两个十进制换成一个十六进制入second中 mov temp,r2 rcall dechex mov second,temp ldi temp,$05 ;T0设置为CK/1024分频。 out tccr0,temp ldi temp,256-195 out tcnt0,temp ;装载T0时间常数。 ldi temp,$ff ;设置b口,d口为输出 out ddrb,temp out ddrd,temp sei ;开中断总开关 ldi temp,$02 out

20、 timsk,temp ;允许t0中断。display:rcall disram ;调用disram clr yh ;设置显示内存地址指针Y为$0060 ldi yl,$60 ldi scndp,$df ;设置扫描显示码SCNDP起址0B11011111.agdis: ld r1,y+ cpi yl,$62 brne npoint add r1,r8npoint: cpi yl,$64 brne next add r1,r8next: out portb,r1 ;把R1送B口显示 out portd,scndp ;扫亮某个数码管 sec ;C=1 ror scndp ;右移SCNDP rcal

21、l delay ;延时 cpi yl,$66 brne agdis ;未扫亮最后一位继续 rjmp displayrecog: cpi cnt1,40 ;40次中断为40*25ms=1秒 brne inthome ;40次中断未到转inthome clr cnt1 ;40次中断到则清cnt1 inc second ;秒寄存器加1 cpi second,60 brne change ;秒寄存器未满转change clr second ;否则清秒寄存器 inc minute ;分寄存器加1 cpi minute,60 brne change ;分寄存器未满转change clr minute ;否

22、则清分寄存器 inc hour ;时寄存器加1 cpi hour,24 brne change ;时寄存器未满转change clr hour ;否则清时寄存器 reti ;中断返回change: mov temp,second ;把second中的十六进制转换成二个十进制数存入r3,r2中 rcall hexdec mov r3,temp1 mov r2,temp mov temp,minute ;把minute中的十六进制转换成二个十进制数存入r5,r4中 rcall hexdec mov r5,temp1 mov r4,temp mov temp,hour ;把hour中的十六进制转换成

23、二个十进制数存入r7,r6中 rcall hexdec mov r7,temp1 mov r6,tempinthome:reti ;中断返回hexdec: clr temp1 ;把temp中的十六进制转成二个十进制入temp1,temp中的子程序hexdec1:subi temp,10 brcs negs inc temp1 rjmp hexdec1negs: subi temp,$f6 ret ;子程序返回dechex: push temp ;把temp1,temp的两个十进制数转换成一个十六进制入temp中 ldi temp2,$0a clr tempdechex1:cpi temp1,$

24、00 breq dh dec temp1 add temp,temp2 rjmp dechex1dh:mov temp1,temp pop temp add temp,temp1 ret ;子程序返回disram: push yl ;压栈保护 push zl push xl ldi zh,high(label*2) ;Z指针指向字形表首址label*2 ldi zl,low(label*2) clr xh ldi xl,$60 ldi yl,$07ramag: ld temp2,y ;y为间址的内容送temp2 dec yl mov zl,temp2 lpm st x+,r0 ;把r0的内容送

25、到$0060-$0065中 cpi xl,$66 brne ramag pop xl pop zl pop yl ;退栈 ret ;子程序返回 wraddram:push temp ;读键存入显示内存及寄存器中。 clr zh mov zl,temp st z,keyn ldi zh,high(label*2) mov zl,keyn lpm st y+,r0 cpi yl,$66 brne pointc ldi yl,$60pointc: ld temp2,y ldi temp3,$80 add temp2,temp3 st y,temp2 pop temp ret ;子程序返回delay:

26、 push temp ;延时子程序lp1: ldi temp2,$10lp2: dec temp brne lp2 dec temp2 brne lp2 pop temp ret ;子程序返回 SCAN1: push xh ;键盘扫描显示子程序(注释从略,见7.3.5)。 PUSH XL PUSH TEMP1 PUSH TEMP LDI XL,$60 SET LDI SCNN,$00 LDI SCNDP,0B11011111 LDI CNT,$06 LDI KSNI,0B11110111 COL1: LDI TEMP,$FF OUT DDRb,TEMP OUT DDRC,TEMP OUT PO

27、RTC,TEMP OUT DDRd,TEMP OUT PORTd,SCNDP LD R1,X+ OUT PORTb,R1 RCALL DELAY MOV TEMP,CNT SUBI TEMP,$03 BRCS NOSK LDI TEMP1,$04 LDI TEMP,0B00001111 OUT DDRc,TEMP OUT PORTc,KSNI RCALL DELYT IN TEMP,PINc ANDI TEMP,0B11110000 SWAP TEMP KROW: SEC ROR TEMP BRCS NOKEY CLT MOV KEYN,SCNN SBIS PINd,$07 ADIW KEYN

28、,$10 NOKEY: INC SCNN DEC TEMP1 BRNE KROW SEC ROR KSNI NOSK: SEC ROR SCNDP DEC CNT BRNE COL1 LDI TEMP,$FF OUT DDRC,TEMP OUT PORTC,TEMP POP TEMP POP TEMP1 POP XL pop xh RET delyt: ldi temp3,$20 dt31:dec temp3 brne dt31 ret .cseg .org $0f00 ;字形表 .dw 0x063f,0x4f5b,0x6d66,0x077d .dw 0x6f7f,0x7c77,0x5e39,0x7179 7.4.6 测频率;测频率,信号从AT90S8515的ICP引脚输入,最大值为为999999

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1