基于汇编语言编写的数码管显示时钟程序
- 格式:doc
- 大小:47.50 KB
- 文档页数:13
福建工程学院课程设计课程: 微机原理及接口课程设计题目:数字时钟专业:软件工程班级: 1101座号: 3110305110姓名:程康2013 年9 月18 日一、设计任务数字时钟:实时显示时间于LED数码管,并可以修改时间,包括上调,下调,复位等。
二、总体方案设计与方案论证1、时钟,前提需要脉冲的产生,根据8253能产生稳定的方波,故时钟脉冲的产生将由8253芯片实现.2、此实验只需要精确到秒,所以,产生的方波,将是频率为1HZ。
3、时间显示采用实验箱上的6个LED数码管分别显示时、分、秒,采用动态扫描方式实现.3、因为涉及到时钟显示和控制两大功能,还有对到来的时钟脉冲接收和处理,在这里,将选用8255芯片,作为中间介质,对用户要求和接收到的脉冲信号进行处理,设置时间通过开关产生单脉冲8255的PC0~PC2输入,通过PC0控制时间的暂停与继续,通过PC1控制时加1,通过PC2控制分加1,通过PC4控制秒加1,通过PC5控制复位。
最终产生达到用户要求的数字时钟,在微机接口实验台上模拟调试实现24小时走时的时钟,并将时间以HH。
MM。
SS显示在6位数码管上。
系统硬件设计主要利用微机实验箱上的电路模块,硬件电路主要有按键电路,单脉冲产生单元、8253定时计数、8255并行接口单元、LED显示电路。
三、总框图及总体软件设计说明四、接口电路逻辑图及硬件设计说明,或系统资源使用说明1、硬件整体电路图五、局部程序框图及其设计说明1、主入口2、时钟运行正常流程图六、源程序清单CODE SEGMENTASSUME CS:CODE,DS:CODE START:MOV AX,CSMOV DX,20BH ;8253MOV AL,36h ;0号定时器,方式3,二进制OUT DX,ALMOV DX,208HMOV AX,1000 ;1000 分频OUT DX,AL ;0号数据口MOV AL,AHOUT DX,ALMOV DX,20BH ;8253MOV AL,76h ;1号定时器,方式3,二进制OUT DX,ALMOV DX,209HMOV AX,1000 ;1000 分频OUT DX,AL ;1号数据口.3MOV AL,AHOUT DX,ALMOV AL,89H ;A。
汇编程序数码管倒计时用7段数码管显示9秒倒计时1 设计内容及目标1.1设计题目用七段LED数码管显示倒计时1.2设计要求(1)用8255控制七段LED数码管。
(2)可选:用8254定时器显示时间。
(3)可选:可通过开关控制暂停计时、继续计时或时间清零。
1.3设计目的通过本学期对微机原理的学习,掌握的知识还停留在理论的上。
但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。
12 设计原理2.1设计思路本次课程设计的题目是用七段LED数码管来显示倒计时。
在这个设计中既要用到8255芯片,又要用到8254芯片对脉冲信号进行记数。
设定初始值,每隔一秒,秒钟数字减一,每过60秒分钟个位减一。
根据需要,需选择的芯片有8255、8259和8254。
2.2设计环境与器材(1)PC微机一台。
用于对程序的编写、编译和测试等,同时还需要对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。
(2)微机原理实验箱一台。
此设备必须能提供8254、8255、8259和数码管等必要芯片,并且能通过接受PC机传来的信息,显示出相应的功能,以支持电子时钟的实现。
(3)导线若干条。
用于电路和芯片之间的连接。
2.3电路原理和主要芯片2.3.1电路工作原理首先利用程序硬性规定分、秒的起始时间为9。
然后通过8254计时器分频,并将以分得的频率接通8259中断控制器,进而通过CPU响应可屏蔽中断达到按秒计时的效果。
;///////////////////////////////////////////;本程序源代码由湖南工程职业技术学院提供.;专业单片机培训,让你学习单片机更容易.;程序员:蒋庆桥;QQ:xxxxxxxxx;本程序用汇编实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历,H_ADJ BIT P3.0 ;时/年调整M_ADJ BIT P3.1 ;分/月调整S_ADJ BIT P1.4 ;秒/日调整DT_SET BIT P1.6 ;时间/日期选择STR BIT P1.5;启动走时T_RST BIT P1.0 ;实时时钟复位线引脚T_CLK BIT P1.1 ;实时时钟时钟线引脚T_IO BIT P1.2 ;实时时钟数据线引脚HH_BIT EQU 40H ;时高位HL_BIT EQU 41H ;时低位MH_BIT EQU 42H ;分高位ML_BIT EQU 43H ;分低位SH_BIT EQU 44H ;秒高位SL_BIT EQU 45H ;秒低位TEMPER_L EQU 46HTEMPER_H EQU 47HYH_BIT EQU 48H ;年高位YL_BIT EQU 49H ;年低位MOH_BIT EQU 4aH ;月高位MOL_BIT EQU 4bH ;月低位DH_BIT EQU 4cH ;日高位DL_BIT EQU 4dH ;日低位SEC EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HTEMPER equ 37hFLAG1 BIT 20h.0 ;DS18B20存在标志位DQ BIT P1.3A_BIT EQU 55HB_BIT EQU 56HDS1302_ADDR EQU 5EHDS1302_DATA EQU 5FHORG 00HLJMP STARTSTART:MOV SP,#60HMOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV R0,#10SETB EASETB ET0SETB TR0MOV R1,37HMOV YEAR,#13H ;上电预置日期、时间MOV WEEK,#03H ;周1 MONMOV MONTH,#07H ;2011 04 25 12:00:00MOV DAY,#05HMOV HOUR,#23HMOV MIN,#00HMOV SEC,#00HMOV 50H,#0/////////////////////////////////////////////////////////////////////// ////MAIN:LCALL KEY//MAIN2:CALL FENLILCALL INIT_18B20LCALL GET_TEMPERcall CHANGEcall dispcall displayAJMP MAINFENLI:MOV A,YEARMOV B,#10HDIV ABMOV YL_BIT,BMOV YH_BIT,AMOV A,MONTHMOV B,#10HDIV ABMOV MOL_BIT,BMOV MOH_BIT,AMOV A,DAYMOV B,#10HDIV ABMOV DL_BIT,BMOV DH_BIT,AMOV A,HOURMOV B,#10HDIV ABMOV HL_BIT,BMOV HH_BIT,AMOV A,MINMOV B,#10HDIV ABMOV ML_BIT,BMOV MH_BIT,AMOV A,SECMOV B,#10HDIV ABMOV SL_BIT,BMOV SH_BIT,ARETKEY: ;按键子程序JB F0,MAIN10 ;F0=1,开始走时。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;按键控制数码管显示;;;;;;;;;;;;;;;;;;;;;;;共阳极接在PE口(PE[0..7]);;;;;;;;;;;;;;;;;;;;;;;;;;;按下按键则显示加1,显示0~F;;;;;;;;;;;;;;;;;;;;;;;;;;;2011-5-3 by 追梦;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BIT2 EQU 0X00000004BIT6 EQU 0X00000040BIT8 EQU 0X00000100GPIOE EQU 0X40011800 ;GPIOE 地址GPIOE_CRL EQU 0X40011800 ;低配置寄存器GPIOE_CRH EQU 0X40011804 ;高配置寄存器GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU 0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位IOPAEN EQU BIT2 ;GPIOA使能位KEY EQU BIT8 ;按键在PA.8GPIOA EQU 0X40010800GPIOA_CRH EQU 0X40010804 ;高配置寄存器GPIOA_IDR EQU 0X40010808RCC_APB2ENR EQU 0X40021018STACK_TOP EQU 0X20002000AREA RESET,CODE,READONL YDCD STACK_TOP ;MSP主堆栈指针DCD START ;复位,PC初始值ENTRY ;指示开始执行STARTLDR R1,=RCC_APB2ENRLDR R0,[R1] ;读LDR R2,=IOPEENORR R0,R2 ;改LDR R2,=IOPAENORR R0,R2 ;改STR R0,[R1] ;写,使能GPIOA,E时钟;PE[0..7] 8个引脚均设置成推挽式输出LDR R0,=0x33333333LDR R1,=GPIOE_CRLSTR R0,[R1];PA.8--KEY 浮空输入MOV R0,#0X04LDR R1,=GPIOA_CRHSTR R0,[R1]LDR R1,=GPIOE_ODRMOV R0,#0XFFSTR R0,[R1] ;初始时数码管无显示LDR R2,=GPIOA_IDR ;R2用于扫描按键LDR R5,=DPYTABLELOOPLDR R3,[R2]AND.W R3,#KEYCMP R3,#0BNE LOOPPUSH {R0}MOV R0,#10BL.W DELAY_NMS ;延时10ms用于消除抖动POP {R0}LDR R3,[R2]AND.W R3,#KEYCMP R3,#0BNE LOOPADD R4,#1CMP R4,#15BLE KEYINMOV R4,#0KEYINLDRB R0,[R5,R4]EOR R0,#0XFFSTR R0,[R1]WAIT_TO_UP ;等待按键弹起LDR R3,[R2]AND.W R3,#KEYCMP R3,#0BEQ W AIT_TO_UPB LOOP;延时R0(ms),误差((R0-1)*4+12)/8us;延时较长时,误差小于0.1%DELAY_NMSPUSH {R1} ;2个周期DELAY_NMSLOOPSUB R0,#1MOV R1,#1000DELAY_ONEUSSUB R1,#1NOPNOPNOPCMP R1,#0BNE DELAY_ONEUSCMP R0,#0BNE DELAY_NMSLOOPPOP {R1}BX LR;子程序,将R0低八位右循环移一位,高位不变ByteRor1PUSH {R1,R2,R3}LDR R3,=0XFFFFFF00LSR R1,R0,#1AND R1,#0X0000007FAND R2,R0,#0X01LSL R2,#7ORR R1,R2AND R0,R3ORR R0,R1POP {R1,R2,R3}BX LR;共阴极数码管的码表,使用时先取反DPYTABLE DCB 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X 71,'\0'END。
实验三数码显示一、实验目的了解LED数码管动态显示的工作原理及编程方法。
二、实验内容编制程序,使数码管显示“DJ--88”字样。
三、实验程序框图四、实验步骤联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“DJ--88”字样。
脱机模式:1、在P.态下,按SCAL键,输入2DF0,按EXEC键。
2、数码管显示“DJ--88”字样。
五、实验程序清单CODE SEGMENT ;S6.ASM display "DJ--88"ASSUME CS:CODEORG 2DF0HSTART: JMP START0PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1CON1: CALL DISPJMP CON1DISP: MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALMOV CL,0DFH ;显示子程序 ,5msMOV BX,OFFSET BUFDIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;01HJZ LX1MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALINC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BUF,0DHMOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,08HMOV BUF+5,08HRETCODE ENDSEND START。
通信工程12-01 (郑州轻工业学院)如图用汇编语言编写的可调时钟(用定时器定时,不精准) ,此程序只是提供一个idea 操作:最上面的键是开始调整键,后面依次为时分秒的切换键、加键、减键、调整完成键。
程序如下: SHIEQU R2 FENEQU R3 MIAO EQU R4CHANGE EQU R5ORG 00HLJMPMAIN ORG000BH //中断入口 LJMPITOR ORG60H MAIN: MOVTMOD,#01H //初始化定时器 MOVTH0,#3CH MOV TL0,#0B0H //50mSXTAL 2 RST ALE P1.0 P1.1 P1.2 P1.3P1.4 P1.5P1.6P1.7 F0.1/AD1 F0.2/AD2 F0.3/AD3 F0.4/AD4 F0.5/AD5 F0.6/AD6 F0.7/AD7 P2.0/A8 P2.1/A9 F2.2/A10 F2.3/A11 F2.4/A12 F2.5/A13 F2.6/A14 F2.7/A15 F3.0/RXD F3.1/TXD F3.2/INT0 F3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR IP3.7/R^—SETB ET0SETB EACLR F0 // 键盘设定标志位MOV R0,#00HMOV R1,#00HMOV P0,#0FFHMOV SHI,#00HMOV FEN,#00HMOV MIAO,#00HMOV CHANGE,#00HSETB TR0 // 打开定时器M1: LJMP KEY // 键盘扫描M2: LCALL INIT // 动态显示LJMP M1INIT: MOV A,SHI // 显示函数MOV B,#0AHDIV ABMOV 40H,AMOV 41H,BCLR P2.0CLR P2.1CLR P2.2JNB F0,O1 CJNE CHANGE,#00H,O1 CJNE R1,#0,O1 MOV P1,#00H CPL P2.7 LCALL DELAY LJMP O10 MOV DPTR,#TABLE MOV A,40H MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P1,#00H CLR P2.0CLR P2.1SETB P2.2JNB F0,O2CJNE CHANGE,#00H,O2CJNE R1,#0,O2MOV P1,#00HLCALL DELAYLJMP O20O1:O10:O2: MOV DPTR,#TABLEO20: MOV A,41HMOVC A,@A+DPTRMOV P1,ALCALL DELAYMOV P1,#00HCLR P2.0SETB P2.1CLR P2.2MOV P1,#040HLCALL DELAYMOV P1,#00HMOV A,FENMOV B,#0AHDIV ABMOV 40H,AMOV 41H,BCLR P2.0SETB P2.1SETB P2.2JNB F0,O3CJNE CHANGE,#01H,O3// 显示小时// 显示分隔符CJNE R1,#0,O3MOV P1,#00H LCALL DELAY LJMP O30 O3: MOV DPTR,#TABLE MOV A,40H MOVCA,@A+DPTR MOV P1,A LCALL DELAYMOV P1,#00HO30: SETB P2.0CLR P2.1CLR P2.2JNB F0,O4CJNE CHANGE,#01H,O4CJNE R1,#0,O4 MOV P1,#00H LCALLDELAYLJMP O40O4: MOV DPTR,#TABLEMOV A,41HMOVC A,@A+DPTRMOV P1,ALCALL DELAYMOV P1,#00H // 显示分钟O40:SETB P2.0CLR P2.1SETB P2.2MOV P1,#040HLCALL DELAY // 显示分隔符MOV P1,#00HMOV A,MIAOMOV B,#0AHDIV ABMOV 40H,AMOV 41H,BSETB P2.0SETB P2.1CLR P2.2JNB F0,O5CJNE CHANGE,#02H,O5CJNE R1,#0,O5MOV P1,#00HLCALL DELAYLJMP O50O5: MOV DPTR,#TABLEMOV A,40HMOVC A,@A+DPTRMOV P1,ALCALL DELAYMOV P1,#00HO50: SETB P2.0SETB P2.1SETB P2.2JNB F0,O6CJNE CHANGE,#02H,O6CJNE R1,#0,O6MOV P1,#00HLCALL DELAYLJMP O60O6: MOV DPTR,#TABLEMOV A,41HMOVC A,@A+DPTRMOV P1,ALCALL DELAYMOV P1,#00H // 显示秒O60: RETKEY: MOV A,P0XRL A,#0FFHCJNE A,#00H,A1LJMP M2A1: LCALL DELAY1MOV A,P0XRL A,#0FFHCJNE A,#00H,KEY1LJMP M2KEY1: CJNE A,#80H,KEY2 // 按键1、开始键SETB F0// CLR TR0JNB P0.7,$LJMP M2KEY2: CJNE A,#40H,KEY3 // 按键2、切换键JNB F0,B1INC CHANGEMOV A,CHANGECJNE A,#03,B2MOV CHANGE,#00HB1: JNB P0.6,$LJMP M2B2: JNB P0.6,$LJMP M2KEY3: CJNE A,#20H,KEY4 // 按键3、加键JNB F0,C1MOV A,CHANGECJNE A,#00,C2INC SHICJNE SHI,#24,C1MOV SHI,#00HC1: JNB P0.5,$LJMP M2C2: CJNE A,#01,C4INC FENCJNE FEN,#60,C3MOV FEN,#00HC3: JNB P0.5,$LJMP M2C4: INC MIAOCJNE MIAO,#60,C5MOV MIAO,#00HC5: JNB P0.5,$LJMP M2KEY4: CJNE A,#10H,KEY5 // 按键4、减键JNB F0,D1MOV A,CHANGECJNE A,#00,D2CJNE SHI,#00H,D0MOV SHI,#24D0: DEC SHID1: JNB P0.4,$LJMP M2D2: CJNE A,#01,D3CJNE FEN,#00H,D00MOV FEN,#60D00: DEC FENJNB P0.4,$LJMP M2D3: CJNE MIAO,#00H,D000MOV MIAO,#60D000: DEC MIAOJNB P0.4,$LJMP M2KEY5: JNB F0,D0000 // 按键5、停止键D0000: ITOR:E0: CLR F0MOV R0,#00HJNB P0.3,$LJMP M2MOV TH0,#3CHMOV TL0,#0B0HINC R0JNB F0,E0CPL P2.6INC 44HMOV A,44HCJNE A,#5,RETURN MOV 44H,#00HLJMP E1CJNE R0,#19,RETURN MOV R0,#00HJB F0,E1INC MIAOCJNE MIAO,#60,RETURN MOV MIAO,#00HINC FENCJNE FEN,#60,RETURNMOV FEN,#00HINC SHICJNE SHI,#24,RETURNMOV SHI,#00HLJMP RETURNE1: INC R1CJNE R1,#2,RETURNMOV R1,#0RETURN: RETIDELAY: MOV R7,#255DJNZ R7,$RETDELAY1: MOV R6,#115 //10mS DL1: MOV R7,#248DJNZ R7,$DJNZ R6,DL1RETTABLE: DB 3FH,06H,5BH,4FHDB 66H,6DH,7DH,07HDB 7FH,6FHEND。
1.要求:使用两个数码管,并从01开始,每隔1s数码管加1,一直显示到60.C语言:#include <>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6; //段选,申明锁存器1的锁存端sbit wela=P2^7; //位选,申明锁存器2的锁存端uchar code table[]= //共阴极数码管编码{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f } ;void delayms(uint xms) //延时xms{ uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display(uchar,uchar);uchar num,num1=1,shi,ge=1; //赋初值void main(){TMOD=0x10; //设定时器1方式1定时50ms,循环20次实现1s延时TH1=(65536-50000)/256; //装初值TL1=(65536-50000)%256;EA=1; //开总中断ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1) //在这里不停的对数码管动态扫描等待中断发生{display(shi,ge);}}void display(uchar shi,uchar ge) //显示子函数{ dula=1;P0=table[shi]; //送段选数据dula=0;P0=0xff; //消影,送位选数据前关闭所有显示,防止打开位选锁存时wela=1; //原来段选数据通过位选锁存器造成混乱P0=0xfe; //送位选数据wela=0;delayms(5); //延时dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);}void T1_time()interrupt 3{TH1=(65536-50000)/256; //重装初值TL1=(65536-50000)%256;num++;if(num==20) //20次循环,50ms 20次=1s{ num=0; //到20次以后清零重新再计数20次num1++; //数码管显示加1if(num1==61) //数码管显示到60后又从01开始num1=1;shi=num1/10; //把两位数分离后分别送数码管显示十位和个位ge=num1%10;}}汇编:ORG 0000HAJMP MainORG 000BH //定时器0的中断入口地址AJMP ZDORG 0030HMain:MOV R0,#1 //初始值从01开始MOV R4,#20 //循环20次来实现1s延时MOV DPTR,#TABLE //表头地址送给DPTRMOV TMOD,#01H //定时器0方式1定时50msMOV TH0,#03CH //赋初值MOV TL0,#0B0HSETB EA //开总中断SETB ET0 //开定时器0中断SETB TR0 //启动定时器0中断LP1:MOV A,R0MOV B,#10DIV AB //A为整数B为余数MOVC A,@A+DPTRSETB //数码管显示十位MOV P0,#0FEHCLRSETBMOV P0,ACLRACALL DELAY5MSMOV A,B //数码管显示个位MOVC A,@A+DPTRSETBMOV P0,#0FDHCLRSETBMOV P0,ACLRACALL DELAY5MSAJMP LP1ZD: MOV T H0,#03CH //重新赋初值MOV T L0,#0B0HDJNZ R4,LP2 //是否循环20次MOV R4,#20INC R0CJNE R0,#61,LP2MOV R0,#01LP2: RETI //中断返回DELAY5MS: MOV R6,#5 //延时5msLOP1: MOV R5,#250LOP2: NOPNOPDJNZ R5,LOP2DJNZ R6,LOP1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //共阴极数码管编码END。
一摘要单片计算机即单片微型计算机。
( Single-Chip Microcomputer ),是集CPU ,RAM ,ROM , 定时,计数和多种接口于一体的微控制器。
他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。
而51 单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
二说明系统由AT89C51 、LED 数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。
系统的功能选择由SB0、SB1 、SB2、SB3、SB4 完成。
其中SB0为时间校对,定时器调整功能键,按SB 0 进入调整状态。
SB1 为功能切换键。
第一轮按动SB1 依次进入一路、二路、三路定时时间设臵提示程序,按SB3 进入各路定时调整状态。
定时时间到,二极管发亮。
到了关断时间后灭掉。
如果不进入继续按SB1 键,依次进入时间?年?位校对、?月?位校对、?日?位校对、?时?位校对、? 分?位校对、? 秒? 位校对状态。
不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加 1 变化。
各预臵量设臵完成后,系统将所有的设臵存入RAM 中,按SB1 退出调整状态。
上电后,系统自动进入计时状态,起始于?00? 时?00? 分。
SB4 为年月日显示转换键,可使原来显示时分秒转换显示年月日。
三、电路原理分析1. 显示原理电原理图见附图1。
由6 个共阴极的数码管组成时、分、秒的显示。
P0 口的8 条数据线P0.0 至P0.7分别与两个CD4511 译码的ABCD 口相接,P2 口的P2.0 至P2.2 分别通过电阻R10至R13与VT1至VT3的基极相连接。
这样通过P0 口送出一个存储单元的高位、低位BCD显示代码,通过P2 口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。
从P0 口输出的代码是BCD码,从P2 口输出的就是位选码。
如图用汇编语言编写的可调时钟(用定时器定时,不精准),此程序只是提供一个idea
操作:最上面的键是开始调整键,后面依次为时分秒的切换键、加键、减键、调整完成键。
程序如下:
SHI EQU R2
FEN EQU R3
MIAO EQU R4
CHANGE EQU R5
ORG 00H
LJMP MAIN
ORG 000BH //中断入口
LJMP ITOR
ORG 60H
MAIN: MOV TMOD,#01H //初始化定时器
MOV TH0,#3CH
MOV TL0,#0B0H //50mS
SETB ET0
SETB EA
CLR F0 //键盘设定标志位
MOV R0,#00H
MOV R1,#00H
MOV P0,#0FFH
MOV SHI,#00H
MOV FEN,#00H
MOV MIAO,#00H
MOV CHANGE,#00H
SETB TR0 //打开定时器
M1: LJMP KEY //键盘扫描
M2: LCALL INIT //动态显示LJMP M1
INIT: MOV A,SHI //显示函数
MOV B,#0AH
DIV AB
MOV 40H,A
MOV 41H,B
CLR P2.0
CLR P2.1
CLR P2.2
JNB F0,O1
CJNE CHANGE,#00H,O1
CJNE R1,#0,O1
MOV P1,#00H
CPL P2.7
LCALL DELAY
LJMP O10
O1: MOV DPTR,#TABLE
MOV A,40H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H
O10: CLR P2.0
CLR P2.1
SETB P2.2
JNB F0,O2
CJNE CHANGE,#00H,O2
CJNE R1,#0,O2
MOV P1,#00H
LCALL DELAY
LJMP O20
O2: MOV DPTR,#TABLE
MOV A,41H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H
O20: CLR P2.0 //显示小时SETB P2.1
CLR P2.2
MOV P1,#040H
LCALL DELAY //显示分隔符
MOV P1,#00H
MOV A,FEN
MOV B,#0AH
DIV AB
MOV 40H,A
MOV 41H,B
CLR P2.0
SETB P2.1
SETB P2.2
JNB F0,O3
CJNE CHANGE,#01H,O3
CJNE R1,#0,O3
MOV P1,#00H
LCALL DELAY
LJMP O30
O3: MOV DPTR,#TABLE
MOV A,40H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H
O30: SETB P2.0
CLR P2.1
CLR P2.2
JNB F0,O4
CJNE CHANGE,#01H,O4
CJNE R1,#0,O4
MOV P1,#00H
LCALL DELAY
LJMP O40
O4: MOV DPTR,#TABLE
MOV A,41H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H //显示分钟O40: SETB P2.0
CLR P2.1
SETB P2.2
MOV P1,#040H
LCALL DELAY //显示分隔符
MOV P1,#00H
MOV A,MIAO
MOV B,#0AH
DIV AB
MOV 40H,A
MOV 41H,B
SETB P2.0
SETB P2.1
CLR P2.2
JNB F0,O5
CJNE CHANGE,#02H,O5
CJNE R1,#0,O5
MOV P1,#00H
LCALL DELAY
LJMP O50
O5: MOV DPTR,#TABLE
MOV A,40H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H
O50: SETB P2.0
SETB P2.1
SETB P2.2
JNB F0,O6
CJNE CHANGE,#02H,O6
CJNE R1,#0,O6
MOV P1,#00H
LCALL DELAY
LJMP O60
O6: MOV DPTR,#TABLE
MOV A,41H
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H //显示秒
O60: RET
KEY: MOV A,P0
XRL A,#0FFH
CJNE A,#00H,A1
LJMP M2
A1: LCALL DELAY1
MOV A,P0
XRL A,#0FFH
CJNE A,#00H,KEY1
LJMP M2
KEY1: CJNE A,#80H,KEY2 //按键1、开始键SETB F0
// CLR TR0
JNB P0.7,$
LJMP M2
KEY2: CJNE A,#40H,KEY3 //按键2、切换键JNB F0,B1
INC CHANGE
MOV A,CHANGE
CJNE A,#03,B2
MOV CHANGE,#00H
LJMP M2
B2: JNB P0.6,$
LJMP M2
KEY3: CJNE A,#20H,KEY4 //按键3、加键JNB F0,C1
MOV A,CHANGE
CJNE A,#00,C2
INC SHI
CJNE SHI,#24,C1
MOV SHI,#00H
C1: JNB P0.5,$
LJMP M2
C2: CJNE A,#01,C4
INC FEN
CJNE FEN,#60,C3
MOV FEN,#00H
C3: JNB P0.5,$
LJMP M2
C4: INC MIAO
CJNE MIAO,#60,C5
MOV MIAO,#00H
LJMP M2
KEY4: CJNE A,#10H,KEY5 //按键4、减键JNB F0,D1
MOV A,CHANGE
CJNE A,#00,D2
CJNE SHI,#00H,D0
MOV SHI,#24
D0: DEC SHI
D1: JNB P0.4,$
LJMP M2
D2: CJNE A,#01,D3
CJNE FEN,#00H,D00
MOV FEN,#60
D00: DEC FEN
JNB P0.4,$
LJMP M2
D3: CJNE MIAO,#00H,D000
MOV MIAO,#60
D000: DEC MIAO
JNB P0.4,$
LJMP M2
KEY5: JNB F0,D0000 //按键5、停止键CLR F0
MOV R0,#00H
D0000: JNB P0.3,$
LJMP M2
ITOR: MOV TH0,#3CH
MOV TL0,#0B0H
INC R0
JNB F0,E0
CPL P2.6
INC 44H
MOV A,44H
CJNE A,#5,RETURN
MOV 44H,#00H
LJMP E1
E0: CJNE R0,#19,RETURN
MOV R0,#00H
JB F0,E1
INC MIAO
CJNE MIAO,#60,RETURN
MOV MIAO,#00H
INC FEN
CJNE FEN,#60,RETURN
MOV FEN,#00H
INC SHI
CJNE SHI,#24,RETURN
MOV SHI,#00H
LJMP RETURN
E1: INC R1
CJNE R1,#2,RETURN
MOV R1,#0
RETURN: RETI
DELAY: MOV R7,#255
DJNZ R7,$
RET
DELAY1: MOV R6,#115 //10mS DL1: MOV R7,#248
DJNZ R7,$
DJNZ R6,DL1
RET
TABLE: DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,6FH
END
(注:文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)。