《单片机原理与应用 8279元件功能介绍》由会员分享,可在线阅读,更多相关《单片机原理与应用 8279元件功能介绍(10页珍藏版)》请在金锄头文库上搜索。
1、四、实验内容四、实验内容 1、按下任意数字键(按下任意数字键(0-9) ,使显示器以右端入口方式显示所输入的,使显示器以右端入口方式显示所输入的 数字。数字。 Z8279 EQU 0FF82H;8279 状态/命令口地址 D8279 EQU 0FF80H ;8279 数据口地址 LEDCLS EQU 0D1H ;显示 RAM 全部清除 LEDWRO EQU 90H;写显示RAM 方式 LEDFEQ EQU 34H;定扫描速率 LEDMOD EQU 10H;右端输入,8 位显示,双键锁定ORG 0000HAJMP STARTORG 0050H START:MOV SP,#60HLCALL INI
2、T8279;初始 8279 LCALL INIT_CPU;初始 CPU KEYBOARD:;键盘查询MOV DPTR,#Z8279MOVX A,DPTRANL A,#0FHJZ KEYBOARD;无键按下,继续查询MOV DPTR,#D8279MOVX A,DPTRMOV 37H,36HMOV 36H,35HMOV 35H,34HMOV 34H,33HMOV 33H,32HMOV 32H,31HMOV 31H,30HMOV 30H,ALCALL DISP_NUMAJMP KEYBOARD INIT_CPU:;显示缓冲区清零MOV A,#00HMOV R0,#30HMOV R2,#08H INI
3、T_CPU1:MOV R0,AINC R0DJNZ R2,INIT_CPU1RET INIT8279:;8279 初始化MOV DPTR,#Z8279MOV A,#LEDCLS;清除 LED 显示MOVX DPTR,A INIT82791:MOVX A,DPTRJB ACC.7,INIT82791MOV A,#LEDMOD;设置 8279 工作方式MOVX DPTR,AMOV A,#LEDFEQMOVX DPTR,AMOV A,#LEDWROMOVX DPTR,AMOV DPTR,#D8279;显示“8279- ”MOV A,#40HMOVX DPTR,AMOV A,#40HMOVX DPTR
4、,AMOV A,#0HMOVX DPTR,AMOV A,#0HMOVX DPTR,AMOV A,#0EFHMOVX DPTR,AMOV A,#27HMOVX DPTR,AMOV A,#5BHMOVX DPTR,AMOV A,#7FHMOVX DPTR,ARET DISP_NUM:;显示模块MOV DPTR,#D8279;入口:30H37H(从右向左)MOV R0,#30HMOV R2,#08H DISP_NUM1:MOV A,R0MOV DPTR,#LEDSEGMOVC A,A+DPTRMOV DPTR,#D8279MOVX DPTR,AINC R0DJNZ R2,DISP_NUM1RET ;
5、段码表 LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDB 3EH,40H,08H,00H,30H,3FH,73HEND2、利用利用 T0 或或 T1 定时器设计一电子表,显示格式为定时器设计一电子表,显示格式为 HH-MM-SS(即(即 时时-分分-秒)秒) ,使具有一般电子表功能。,使具有一般电子表功能。 说明: (1)利用 8279 可实现对键盘/显示器的自动扫描,以减轻 CPU 负担, 其有显示稳定、程序简单、不会出现误动作等特点。 (2)该电子钟使用定时器 T0 作 50ms 的定
6、时中断。 (216计数初值)晶振周期12=50 ms 计数初值为 15536=3CB0H (3)从 00-00-00 开始计时,到 23-59-59 后自动返回 00-00-00,继续 计时。 (4)可设置初值,并具有判断输入错误的能力。 A 键: 设置初值,依次输入预置的时、分、秒、值。 B 键:确认设置的初值,并开始计数。同时具有判断输入错误的能力, 若 输入有错,则按原来的计数时间继续计数。Z8279 EQU 0FF82H;8279 状态/命令口地址 D8279 EQU 0FF80H ;8279 数据口地址 LEDCLS EQU 0D1H ;显示 RAM 全部清除 LEDWRO EQU
7、90H;写显示RAM 方式 LEDFEQ EQU 34H;定扫描速率 LEDMOD EQU 10H;右端输入,8 位显示,双键锁定ORG 0000HAJMP STARTORG 000BH;INT T0 入口地址AJMP INTT0ORG 0100H START:MOV SP,#60HLCALL INIT8279;初始化 8279 LCALL INIT_CPU;初始化 CPUMOV R3,#00HMOV R4,#00HMOV R5,#00HMOV 50H,#20MOV TMOD,#01H ;T0 模式 1,TLx、THx 构成 16 位定时器MOV TL0,#0B0H;设置 50ms 计数器初值
8、MOV TH0,#3CHSETB TR0;启动定时器LCALL DISP_NUM ;显示SETB EA;开中断 SETB ET0 KEYBOARD:;键盘查询MOV DPTR,#Z8279;8279 的状态/命令口MOVX A,DPTRANL A,#0FHJZ KEYBOARDMOV DPTR,#D8279;8279 的数据口MOVX A,DPTRCJNE A,#0AH, KEYBOARD;输入为 A 时开始置数LCALL KEY LJMP KEYBOARD;继续查询键盘 INTT0:;中断服务程序DJNZ 50H,NEXT;进入 20 次中断后,秒加 1MOV 50H,#20 MOV A,R
9、5CJNE A,#59H,SECOND;判断是否秒=59MOV R5,#00HMOV A,R4CJNE A,#59H,MINUTE;判断是否分=59MOV R4,#00H MOV A,R3 CJNE A,#23H,HOUR;判断是否时=23MOV R3,#00HSJMP L3 SECOND:;秒加 1,并做十进制调整ADD A,#1HDA AMOV R5,ASJMP L3 MINUTE: ;分加 1,并做十进制调整 ADD A,#1HDA AMOV R4,ASJMP L3 HOUR: ;时加 1,并做十进制调整 ADD A,#1HDA AMOV R3,A L3: HH: MOV A,R3;分别
10、将小时的高低位送入 37H,36HANL A,#0F0HSWAP A;高低位反转MOV 37H,AMOV A,R3ANL A,#0FHMOV 36H,A MOV 35H,#11H MM:MOV A,R4 ;分别将分的高低位送入 34H,33HANL A,#0F0HSWAP AMOV 34H,AMOV A,R4ANL A,#0FHMOV 33H,AMOV 32H,#11H SS: MOV A,R5;分别将秒的高低位送入 34H,33HANL A,#0F0HSWAP AMOV 31H,AMOV A,R5ANL A,#0FHMOV 30H,ALCALL DISP_NUM;显示 NEXT:MOV TL
11、0,#0B0H;设置计数值MOV TH0,#3CHRETI;中断返回INIT_CPU: ;初始化 CPUMOV 37H,#0HMOV 36H,#0HMOV 35H,#11HMOV 34H,#0HMOV 33H,#0HMOV 32H,#11HMOV 31H,#0HMOV 30H,#0HRETINIT8279:;初始化 8279MOV DPTR,#Z8279MOV A,#LEDCLSMOVX DPTR,A INIT82791:MOVX A,DPTRJB ACC.7,INIT82791MOV A,#LEDMODMOVX DPTR,AMOV A,#LEDFEQMOVX DPTR,AMOV A,#LED
12、WROMOVX DPTR,ARETDISP_NUM:;显示模块MOV DPTR,#D8279MOV R0,#30HMOV R2,#08H DISP_NUM1:MOV A,R0MOV DPTR,#LEDSEGMOVC A,A+DPTRMOV DPTR,#D8279MOVX DPTR,AINC R0DJNZ R2,DISP_NUM1RETKEY:MOV 10H,37H;另开辟一内存单元保存原计数值MOV 11H,36HMOV 12H,35HMOV 13H,34HMOV 14H,33HMOV 15H,32HMOV 16H,31HMOV 17H,30HCLR TR0;关闭定时器MOV R1,#20H
13、KEYBOARD1:MOV DPTR,#Z8279MOVX A,DPTRANL A,#0FHJZ KEYBOARD1;等待键盘输入MOV DPTR,#D8279MOVX A,DPTRCJNE A,#0BH,KEY1;按下 B 返回SETB TR0;启动定时器LJMP EXIT KEY1:MOV 37H,36H;输入六个数 先小时后分钟MOV 36H,35HMOV 35H,34HMOV 34H,33HMOV 33H,32HMOV 32H,31HMOV 31H,30HMOV 30H,AMOV R1,A;A 存入 20H-27HINC R1LCALL DISP_NUMAJMP KEYBOARD1 E
14、XIT: ;比较输入是否大于 23-59-59MOV A,20HCJNE A,#02H,P0LJMP JJ P0: JC JJSJMP W1;小时高位大于 2 则按原计数值继续计数MOV A,21HCJNE A,#03H,P1 LJMP JJ P1: JC JJ SJMP W1;小时低位大于 3 则按原计数值继续计数MOV A,22H CJNE A,#05H,P2 LJMP JJ P2: JC JJ SJMP W1 ;分高位大于 5 则按原计数值继续计数MOV A,23H CJNE A,#09H,P3 LJMP JJ P3: JC JJ SJMP W1;分低位大于 9 则按原计数值继续计数MO
15、V A,24H CJNE A,#05H,P4 LJMP JJ P4: JC JJ SJMP W1;秒高位大于 5 则按原计数值继续计数MOV A,25H CJNE A,#09H,P5 LJMP JJ P5: JC JJ;秒低位大于 9 则按原计数值继续计数SJMP W1 W1: MOV 20H,10H;将原来的计数值取出 MOV 21H,11H MOV 22H,13H MOV 23H,14H MOV 24H,16H MOV 25H,17HJJ: MOV R1,#20H;将输入变成可显示的MOV A,20HSWAP AMOV R3,AMOV A,21HORL A,R3MOV R3,A;将小时高低位组合在 R3 中MOV A,22HSWAP AMOV R4,AMOV A,23HORL A,R4MOV R4,A;将分高低位组合在 R4 中MOV A,24HSWAP AMOV R5,AMOV A,25HORL A,R5MOV R5,A;将秒高低位组合在 R5 中LCALL DISP_NUM;显示所置时分秒RETLEDSEG:DB 3