为以下电路图写程序(C语言)。

为以下电路图写程序(C语言)。,第1张

S_SET BIT P1.0 数字钟秒控制位

M_SET BIT P1.1 分钟控制位

H_SET BIT P1.2 小时控制位

SECOND EQU 30H

MINUTE EQU 31H

HOUR EQU 32H

TCNT EQU 34H

ORG 00H

SJMP START

ORG 0BH

LJMP INT_T0

START: MOV DPTR,#TABLE

MOV HOUR,#0 初始化

MOV MINUTE,#0

MOV SECOND,#0

MOV TCNT,#0

MOV TMOD,#01H

MOV TH0,#(65536-50000)/256 定时50毫秒

MOV TL0,#(65536-50000)MOD 256

MOV IE,#82H

SETB TR0

****************************************************

判断是否有控制键按下,是哪一个键按下

A1: LCALL DISPLAY

JNB S_SET,S1

JNB M_SET,S2

JNB H_SET,S3

LJMP A1

S1: LCALL DELAY 去抖动

JB S_SET,A1

INC SECOND 秒值加1

MOV A,SECOND

CJNE A,#60,J0 判断是否加到60秒

MOV SECOND,#0

LJMP K1

S2: LCALL DELAY

JB M_SET,A1

K1: INC MINUTE 分钟值加1

MOV A,MINUTE

CJNE A,#60,J1 判断是否加到60分

MOV MINUTE,#0

LJMP K2

S3: LCALL DELAY

JB H_SET,A1

K2: INC HOUR 小时值加1

MOV A,HOUR

CJNE A,#24,J2 判断是否加到24小时

MOV HOUR,#0

MOV MINUTE,#0

MOV SECOND,#0

LJMP A1

****************************************************

等待按键抬起

J0: JB S_SET,A1

LCALL DISPLAY

SJMP J0

J1: JB M_SET,A1

LCALL DISPLAY

SJMP J1

J2: JB H_SET,A1

LCALL DISPLAY

SJMP J2

***********************************************

定时器中断服务程序,对秒,分钟和小时的计数

INT_T0: MOV TH0,#(65536-50000)/256

MOV TL0,#(65536-50000)MOD 256

INC TCNT

MOV A,TCNT

CJNE A,#20,RETUNE 计时1秒

INC SECOND

MOV TCNT,#0

MOV A,SECOND

CJNE A,#60,RETUNE

INC MINUTE

MOV SECOND,#0

MOV A,MINUTE

CJNE A,#60,RETUNE

INC HOUR

MOV MINUTE,#0

MOV A,HOUR

CJNE A,#24,RETUNE

MOV HOUR,#0

MOV MINUTE,#0

MOV SECOND,#0

MOV TCNT,#0

RETUNE: RETI

******************************************

显示控制子程序

DISPLAY:MOV A,SECOND 显示秒

MOV B,#10

DIV AB

CLR P3.6

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.6

MOV A,B

CLR P3.7

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.7

CLR P3.5

MOV P0,#40H 显示分隔符

LCALL DELAY

SETB P3.5

MOV A,MINUTE 显示分钟

MOV B,#10

DIV AB

CLR P3.3

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.3

MOV A,B

CLR P3.4

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.4

CLR P3.2

MOV P0,#40H 显示分隔符

LCALL DELAY

SETB P3.2

MOV A,HOUR 显示小时

MOV B,#10

DIV AB

CLR P3.0

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.0

MOV A,B

CLR P3.1

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P3.1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

DELAY: MOV R6,#10

D1: MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

END

本设计是在51单片机与PC机上实现基于RS232串行通讯功能的,制定和实现可靠的上下位机通讯协议,完成显示数据的下传和读取,图形和文字有静止、移入移出等多种显示方式是本设计的最大特点。

第二章 系统组成与工作原理2.1系统设计要求和技术指标

此次设计的系统将由五部分(主要分为上位机部分和下位机部分,其中下位机主要分成,显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏)组成来实现,分别为:上位PC机﹑串行电平转换器﹑显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏。控制系统的结构框图如图2.1所示。

设计要求系统能控制中文LED汉字显示,主控板采用以单片机为核心的单片机系统。MCS-51单片机具有扩展性强﹑功能强盛﹑价格较低等长处,因此,采用Atmel公司的AT89C52单片机。采用MAX232作为RS-232与TTL电平的转换器件。PC机发送到下位机的数据先由SBUF(数据缓冲区)接收,再存入EEPROM器件AT24C256中。

汉字点阵显示屏可分为屏体和控制器两部分。屏体的主要部分是LED点阵屏,还有行列驱动电路。LED点阵显示屏采用8*8LED显示模块拼接而成。控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据预备好,一旦该行选通,这一行上的LED发光器件就可以根据列数据进行显示。

从理论上讲,不论显示图形还是文字,只要控制这些组成图形或文字的各个点所在位置相应的LED器件发光,就可以得到想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。16*16点阵共有256个发光二极管,显然单片机没有这么多的端口,假如采用锁存器来扩展端口,按8位的锁存器来计算,16*16的点阵需要256/8=32个锁存器。这个数字很大,因为这里仅仅是16*16的点阵,但是在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本也就将是一个很大的数字。因此,在实际应用中的显示屏几乎都不采用静态驱动显示方式之中设计,而是采用另一种称为动态扫描的显示方式。

所谓动态扫描,简朴地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行同名列共用一套列驱动器。以本次设计的16*16点阵为例,把所有的同一行发光管的阳极连在一起,把所有同一列发光管的阴极连在一起(共阳极接法),先发送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其点亮一定的时间,然后熄灭;再发送出第二行的数据并锁存,然后选通第二行使其点亮一定的时间,然后熄灭;……第十六行之后又重新点亮第一行,这样反复轮回。当这样轮回的速度足够快时(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。

采用串行传输方案,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面,这无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相称长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响LED的亮度。

为解决串行传输中列数据准备与列数据显示的时间矛盾问题,可以采用重叠处理的方法,即在显示本行各列数据的同时,传送下一行的列数据。为达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述的分析,可以归纳出列驱动器电路应具备的主要功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据送入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而会不影响本行的显示。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12137443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存