定时液晶显示实验.ppt

上传人:豆**** 文档编号:59597261 上传时间:2022-11-11 格式:PPT 页数:46 大小:199.50KB
返回 下载 相关 举报
定时液晶显示实验.ppt_第1页
第1页 / 共46页
定时液晶显示实验.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《定时液晶显示实验.ppt》由会员分享,可在线阅读,更多相关《定时液晶显示实验.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、定时液晶显示实验 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望实验目的:实验目的:LCD与定时中断的联合编程,与定时中断的联合编程,显示时钟显示时钟2实验器材:实验器材:1.SD-1型在线编程实验仪型在线编程实验仪2.导线若干导线若干3硬件接线:硬件接线:使用实验板使用实验板LCD固定接线固定接线(1.单片机的单片机的PTB0-PTB7作为输出与作为输出与LCD的的D0-D7连接连接;2.单片机的单片机的PTC0,PTC1,PTC2分别接分别接LCD的的RS R

2、/W E;3.单片机的单片机的PTA7-4接接4根键盘列线(根键盘列线(X4-1),),PTA3-0接接4根键盘行线(根键盘行线(Y4-1))4软件功能:软件功能:n开始时开始时,LCD显示两行显示两行“Current Time is:00:00:00 SUDA”“*”键为设置键键为设置键,按下后可设置时按下后可设置时,分分,秒秒,随随后后 按按“#”时钟开始运行时钟开始运行。5程序清单:程序清单:n口地址定义口地址定义n定时器的寄存器地址定时器的寄存器地址定义定义n变量定义变量定义n系统初始化系统初始化n总循环总循环n扫描读键值子程序扫描读键值子程序n键盘中断子程序键盘中断子程序n定时器溢出

3、子程序定时器溢出子程序键盘中断初始化子程键盘中断初始化子程序序键盘转化为具体值子键盘转化为具体值子程序程序LCD初始化子程序初始化子程序LCD命令执行子程序命令执行子程序LCD显示子程序显示子程序转码子程序转码子程序中断矢量中断矢量6备注说明:备注说明:n运行时请与标准时间进行校对运行时请与标准时间进行校对7口地址定义口地址定义n*单片机的PTA7-4接4根键盘列线(X4-1),PTA3-0接4根键盘行线(Y4-1)nDDRA EQU$0004 ;A口数据方向寄存器nPTA EQU$0000 ;A口数据寄存器nPTAPUE EQU$000D ;A口上拉电阻允许寄存器n*单片机的PTB0-PTB

4、7作为输出与LCD的D0-D7连接nDDRB equ$0005 ;B口数据方向寄存器 nPTB equ$0001 ;B口数据寄存器n*单片机的PTC0,PTC1,PTC2分别接LCD的RS R/W EnPTC EQU$0002 ;C口数据寄存器nDDRC EQU$0006 ;C口数据方向寄存器nLCD-RS EQU 0 ;LCD寄存器选择信号接PTC0nLCD-RW EQU 1 ;读写信号接PTC1nLCD_E EQU 2 ;LCD使能信号接PTC2nINTKBSCR EQU$001A ;键盘状态和控制寄存器nINTKBIER EQU$001B ;键盘中断允许寄存器8定时器的寄存器地址定义nT

5、1SC EQU$0020 ;定时器1状态和控制寄存器nT1CNTHEQU$0021 ;定时器1计数寄存器(高位)nT1CNTLEQU$0022 ;定时器1计数寄存器(低位)nT1MODHEQU$0023 ;定时器1模数寄存器(高位)nT1MODLEQU$0024 ;定时器1模数寄存器(低位)9变量定义nRAMstartAddr equ$0040;RAM的起始地址(因芯片不同可以更改)nFlashStartAddr equ$8000;程序开始地址(因芯片不同可以更改)nORG RAMstartAddrnLCD_Buffer1 RMB 16 ;存放16字节显示缓冲数据(第一行)nLCD_Buffe

6、r2 RMB 16 ;存放16字节显示缓冲数据(第二行)nSec RMB 1 ;时钟的秒 nMin RMB 1 ;时钟的分nHou RMB 1 ;时钟的小时nBeginRun RMB 1 ;nSetByte RMB 1 ;nKBValue RMB 1 ;执行键盘中断程序后,存放键值的内存KbValuenTmpvar1 RMB 1 ;变量Tmpvar1,缓冲使用nTmpvar2 RMB 1 ;变量Tmpvar2,缓冲使用nTmpvar3 RMB 1 ;变量Tmpvar3nTmpvar4 RMB 1 ;变量Tmpvar410初始化n系统初始化nPLL初始化n口初始化n定时器1初始化n设定初始时间n

7、键盘中断初始化11系统初始化NOP ;初始化开始 SEI ;禁止所有中断 LDHX#$023F ;堆栈初始化,放入GP32的RAM最高端 TXS MOV#%00000001,$001E ;初始化CONFIG2,内部总线时钟用作SCI的时钟 MOV#%00111101,$001F ;初始化CONFIG1,允许LVI复位信号,;禁止LIV模块的电源,LIV工作在5V,;经过32个周期退出STOP模式,禁止COP模块12PLL初始化;外接晶阵32.768KHz,初始化成总线频率为2.4576MHz CLR$0036 ;清零,初始化PCTL,MOV#$01,$0036 MOV#$01,$0038 MO

8、V#$2C,$0039 MOV#$80,$003A BSET 5,$0036 BSET 7,$0037 ;自动方式 BSET 4,$0036 ;选择PLL为系统时钟源13口初始化 LDA#%11110000 STA PTAPUE LDA#%11111111 ;B口为输出 STA DDRB LDA#%00000111 ;C口的PTC0-2为输出 STA DDRC14定时器1初始化 LDA#%01100110 ;允许溢出中断、不启动计数、分频因子=64 STA T1SC LDHX#$0000 ;计数寄存器初值=$0000 STHX T1CNTH LDHX#$9600 ;设1秒产生1次溢出中断 ST

9、HX T1MODH ;模数寄存器设定值=1(2457600/64)=$9600 15设定初始时间 LDHX#$0000Display1:;把要显示的16个初始字符放入LCD_Buffer12中 LDA DisplayBytes1,X STA LCD_Buffer1,X LDA DisplayBytes2,X STA LCD_Buffer2,X AIX#1 CPHX#$10 BNE Display1 ;循环16次 JSR Init_LCD ;LCD初始化 JSR Show_LCD ;将内存LCD_Buffer12的32字节ASCII字符送LCD显示 MOV#$00,SEC MOV#$00,MIN

10、 MOV#$00,HOU16键盘中断初始化 JSR KBInit ;执行键盘中断初始化子程序-初始化完毕-17总循环n;允许定时器1计数寄存器计数,n;开放定时中断,开放键盘中断 n BCLR 1,INTKBSCR ;开放键盘中断n BCLR 5,T1SC ;允许定时器1计数寄存器计数n CLI ;开放中断n*总循环nStart_1:;总循环开始处 n NOP ;仅为实验例程,主循环无实际工作n BRA Start_118扫描读键值子程序(从KBA开始)n功能:扫描一次接在PTA口的4*4键盘n (PTA7-4接4根键盘列线(X4-1),PTA3-0接 n 4根键盘行线(Y4-1)上的按键(使

11、用行扫描法),n 键值放在A中若无按键,A中值$FF n占用内存:Tmpvar1(缓冲使用)n出口:A=键值 n-19扫描读键值子程序nKBA:MOV#%11111110,Tmpvar1 ;第一根行线为0 LDX#$04 ;扫描4根行线KB1:LDA PTA ;取PTA给A ORA#%00001111 ;PTA7-4保留原态,PTA3-0为1 AND Tmpvar1 ;令PTAn=0,n=0,1,2,3 STA PTA ;处理后给PTA以便查询 NOP NOP LDA PTA ;查第n列上是否有键按下 AND#%11110000 ;保留PTA7-4列值,令低PTA3-0=0 CBEQA#$F0

12、,KB2 ;A等于$F0,本行线没键按下,转到KB2 ;A不等于$F0,本行有键按下 LDA PTA ;A放键值 BRA KB3 ;转到KB3结束中断KB2:SEC ;令C=1 ROL Tmpvar1 ;使下一个行线为0,查下一行 DBNZX KB1 ;对行线循环 LDA#$FF ;没有键被按下为$FFKB3:RTS20键盘中断初始化子程序(从KBInit开始)n功能:对被定义为键盘中断的引脚进行初始化,n 但未开放 键盘中断 n占用CPU内寄存器:A 21键盘中断初始化子程序nKBInit:n LDA#$00 ;定义A口之前复位PTAn STA PTAn LDA#%00001111 ;定义A

13、口7-4输入(作为列),3-0输出(作为行)n STA DDRAn LDA#%11110000 ;定义A口7-4有上拉电阻n STA PTAPUEn BSET 1,INTKBSCR ;屏蔽键盘中断n LDA#%11110000 ;允许KBIE7-4PIN中断进入n STA INTKBIERn BSET 2,INTKBSCR ;清除键盘中断n RTS22键盘中断子程序(从KBint开始)n-键盘中断子程序(从KBint开始)-n功能:键盘中断程序,键值放入内存KbValue中 n调用子程序:扫描法读键值子程序(KBA),键盘中断初始化子程序(KBInit)n出口:第0页内存单元KbValue中为

14、键值 -23键盘中断子程序1nKBint:n PSHH ;保护Hn SEI ;禁止中断n BSET 1,INTKBSCR ;禁止键盘中断n JSR KBA ;调子程序KBA,键值放在A中n STA KbValue ;放入内存KbValuen JSR KBdef ;执行键盘转化为具体值子程序,转成键定义值 n ;是否为*?,不是退出KBint_Exitn CMP#!42 ;ASCI*键n BEQ SetUpBegin n JMP KBint_Exit ;不是,等待*键nSetUpBegin:;是*,xx:xx:xx n BSET 2,INTKBSCR ;清除键盘中断n MOV#$0,SetByt

15、e ;赋初值0nSetUpStore:;保存原来每位显示的数据n LDHX#$00n LDX SetByten LDA LCD_Buffer2,Xn STA Tmpvar4 nSetUp:n LDHX#$00n LDX SetByten LDA#!32 ;$39(数值9)转SetUpn CMP#$30n BLO SetUp ;$30(数值0)转SetUp$32(数值2)无效 转SetUpn BRA SetUp3数值n LDX#!10n MUL ;(A)*(X)-A n STA TmpVar3 ;A-临时单元TmpVar3n PULAn PSHAn SUB#$30 ;ASCII 值-数值n AD

16、D TmpVar3 n CMP#!23n PULAn BHI SetUp ;23无效 转SetUpn BRA SetUp3 ;有效 转SetUp3nSetUp2:;第3、6位小于6(ASCII值小于36)n PULA n CMP#$36 n BHS SetUp ;=36(数值=6)无效 转SetUpn nSetUp3:;是有效的数,则置于相应位置n LDHX#$00n LDX SetByte n STA LCD_Buffer2,X数值n LDX#!10n MULn LDHX#!1n ADD LCD_Buffer2,X 数值n LDX#!10n MULn LDHX#!4n ADD LCD_Buf

17、fer2,Xn SUB#$30n STA Minn LDHX#!6n LDA LCD_Buffer2,Xn SUB#$30 ;ASCII 值-数值n LDX#!10n MULn LDHX#!7n ADD LCD_Buffer2,Xn SUB#$30n STA Secn n JSR Show_LCD ;将内存LCD_Buffer12的32字节ASCII字符送LCD显示29键盘中断子程序7nBCLR 7,T1SC ;清除定时器溢出标志位n nKBint_Exit:n PULH ;H出栈n BSET 1,INTKBSCR ;禁止键盘中断n BSET 2,INTKBSCR ;清除键盘中断n JSR K

18、BInit ;调用键盘中断初始化子程序n BCLR 1,INTKBSCR ;开放键盘中断n CLI n RTI30键盘转化为具体值子程序(从KBdef开始)n功能:键值转为键盘表面具体的字符或符号代表值 n入口:内存第0页中KBValue为键值,n 使用键值编号表 n占用CPU寄存器:X(存放相对地址)n出口:A=键定义值 31键盘转化为具体值子程序nKBdef:n LDHX#$0000 nKBkey1:n LDA KBTABLE,Xn BEQ KBkey3 ;=0,表示表中未定义此键值n CMP KBValue ;与KBValue入口键值相比较n BNE KBkey2 ;不等,未找到转KBk

19、ey2n INCX ;找到地址加1n LDA KBTABLE,X ;取键定义值给An BRA KBkeyrnKBkey2:n INCXn INCXn BRA KBkey1nKBkey3:n LDA#$FF ;未定义键用FF标志nKBkeyr:RTSnKBTABLE FCB$EE,1,$DE,2,$BE,3,$7E,An FCB$ED,4,$DD,5,$BD,6,$7D,Bn FCB$EB,7,$DB,8,$BB,9,$7B,Cn FCB$E7,*,$D7,0,$B7,#,$77,Dn FCB$0032Init_LCD(LCD初始化子程序)n入口:无 n功能:初始化LCD(HD44780)n调用

20、子程序:LCD_Command(LCD命令执行子程序)n占用CPU内部寄存器:A,X1.6msnCLR-LCD-2-MS:;延时n AIX#-1n CPHX#0n BNE CLR-LCD-2-MSn LDA#%00000110 ;输入方式设置:数据读写操作后,AC自动增1n ;显示不动,光标左移n JSR LCD_Commandn LDA#%00010100 ;光标移位设置:光标右移一个字符位,AC自动加1n JSR LCD_Commandn LDA#%00001100 ;显示开关设置:开显示,关光标显示,不闪烁n JSR LCD_Commandn RTS34LCD_Command(LCD命令

21、执行子程序)n入口:A n功能:对A中指令使用PORTA作为输出口,n 到LCD进行命令执行或字符显示 n占用CPU内部寄存器:A 35LCD_CommandnLCD_Command:n PSHH ;保护现场n PSHXn LDHX#$0020 ;等待40usn DBNZX*n STA PTB ;把指令码送到A口n NOPn NOPn BSET LCD_E,PTC ;LCD开始接受数据,置使能位为1n NOPn NOPn BCLR LCD_E,PTC ;LCD结束接受数据,置使能位为0n LDHX#$0020 ;等待40usn DBNZX*n PULX ;恢复现场n PULHn RTS36Sh

22、ow_LCD(LCD显示子程序)n入口:A,HX n出口:HX所指的内存二字节地址为A中 n描述:转一字节16进制数为二字节ASCII码字符37Show_LCD;第一行Show_LCD:;进行显示数据寄存器(DD RAM)地址设置 BCLR LCD-RS,PTC BCLR LCD-RW,PTC ;设置前8个字符首DD RAM地址 LDA#%10000000 JSR LCD_Command LDHX#$00 ;显示前8个字符Show-First-8Byte:BSET LCD-RS,PTC ;令LCD的RS=1,R/W=0,写入数据到DD RAM中 BCLR LCD-RW,PTC LDA LCD_

23、Buffer1,X ;将LCD_Buffer+X的数据放入A作为入口 JSR LCD_Command AIX#1 CPHX#$8 BNE Show-First-8Byte LDA#%10001000 ;设置后8个字符首DD RAM地址 BCLR LCD-RS,PTC BCLR LCD-RW,PTC JSR LCD_Command LDHX#$08 ;显示后8个字符38Show_LCD1Show-Next-8Byte:BSET LCD-RS,PTC ;令LCD的RS=1,R/W=0,写入数据到DD RAM中 BCLR LCD-RW,PTC LDA LCD_Buffer1,X ;将LCD_Buff

24、er+X的数据放入A作为入口 JSR LCD_Command AIX#1 CPHX#$10 BNE Show-Next-8Byte ;第二行,进行DD RAM地址设置 BCLR LCD-RS,PTC ;令LCD的RS0、R/W=0 BCLR LCD-RW,PTC LDA#%11000000 ;设置DD RAM地址为#%1000000(即40H)JSR Lcd_Command ;执行设置光标在DDRAM位置 LDHX#$0 ;显示前8个字符 Show_F_8b2:BSET LCD-RS,PTC ;令LCD的RS=1,R/W=0:写数据 BCLR LCD-RW,PTC LDA LCD_Buffer

25、2,x ;将LCD_Buffer开始的中第x位数据存放入A中 JSR Lcd_Command ;执行命令 AIX#1 CPHX#$8 BNE Show_F_8b2;完成前8个字符的显示39Show_LCD2;进行DD RAM地址设置 LDA#%11001000 ;设置DDRAM地址为#%1000000(即48H)BCLR LCD-RS,PTC ;令LCD的RS0、R/W=0 BCLR LCD-RW,PTC JSR Lcd_Command ;执行命令 LDHX#$08 ;显示后8个字符Show_N_8b2:BSET LCD-RS,PTC ;令LCD的RS=1,R/W=0:写数据 BCLR LCD

26、-RW,PTC LDA LCD_Buffer2,x ;将LCD_Buffer开始的中第x位数据存放入A中 JSR Lcd_Command ;执行命令 AIX#1 CPHX#$10 BNE Show_N_8b2 ;完成后8个字符的显示RTS40转码子程序TimeCH:PSHA ;进栈,保存A,H,X中的内容 PSHH PSHX LDHX#$000A ;取10 DIV ;除以10,A中放商,H中放余数 ADD#$30 ;实际数值加上$30(!48)变ASCII码 PULX ;X出栈 PULH ;H出栈 STA,X ;把A的内容存储到以(X)为地址的单元中 AIX#$1 ;立即数1加到变址寄存器,转

27、下一字符 PULA PSHH PSHX LDHX#$000A DIV PSHH PULA ADD#$30 PULX PULH STA,X RTS 41定时器溢出中断子程序Timer1OvF:INC Sec LDA Sec CMP#!60 BLO Tim1OvF_Exit CLR Sec INC Min ;一分到 LDA Min CMP#!60 BLO Tim1OvF_Exit CLR Min INC Hou ;一小时到 LDA Hou CMP#!24 BLO Tim1OvF_Exit CLR Sec CLR Min CLR Hou42定时器溢出中断子程序1Tim1OvF_Exit:LDA T1

28、SC ;清除定时器溢出标志位 BCLR 7,T1SC SendToDisp:LDA Hou ;将小时转为两字节ACSII码字符放入显示缓冲区LCD_Buffer2:01 LDHX#LCD_Buffer2 JSR TimeCH LDA min ;将小时转为两字节ACSII码字符放入显示缓冲区LCD_Buffer2:01 LDHX#LCD_Buffer2+!3 JSR TimeCH LDA SEC ;将小时转为两字节ACSII码字符放入显示缓冲区LCD_Buffer2:01 LDHX#LCD_Buffer2+!6 JSR TimeCH JSR Show_LCD ;显示起始数据 RTI43延时子程序

29、nDelay_ms:n LDA#!248 ;0.5msn JSR Delay_nsn LDA#!248 ;0.5msn JSR Delay_nsn AIX#-!1n CPHX#!0n BNE Delay_ms ;4Cyclesn RTS ;4Cycles44延时子程序1nDelay_ns:n NOP ;1Cyclesn NOP ;1Cyclesn DBNZA Delay_ns ;3Cyclesn RTS ;4Cycles45中断矢量n ORG$FFE0 ;键盘中断矢量n DW KBintn ORG$FFF2 ;时钟中断矢量n DW Timer1OvFn ORG$FFFE ;复位向量n DW MainInit46

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁