加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

LED显示屏工作原理及驱动程序(五)

(2016-01-28 15:19:48)
标签:

it

源码

分类: 单片机应用
采用STC12C5A60S2单片机的LED显示屏驱动程序

一、原理图如下,由于LED显示屏上的驱动集成电路使用了74HC245集成电路(前面的例子是使用74HC244),使能端并取消了74LS04,所以驱动电路有所变化,相应的程序也有所改变。原来74LS138使能端经74LS04反相是低电平,现在取消了74LS04就变为高电平了

http://s5/mw690/0068KRmqzy6YVkd0oVCe4&690

二、显示效果如下:2个画面交替显示。

http://s13/mw690/0068KRmqzy6YVkkZveQ2c&690

三、STC12C5A60S2单片机简介

STC12C5A60S2STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2PWM8路高速10A/D转换,针对电机控制,强干扰场合。

1、增强型8051CPU,单时钟/机器周期,stc12c5a60s2的运行速度比at89s52要快12

2、工作电压 5.5-3.5V

360K字节ROM1280字节数据RAM

4、通用I/O口,复位后为:准双向口/弱上拉

可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏

每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA

5、有1K字节的EEPROM,擦写次数在10万次以上

6、看门狗

7、内部集成MAX810专用复位电路

8、外部掉电检测电路

9、时钟源:外部高精度晶体/时钟,内部R/C振荡器

常温下内部R/C振荡器频率为:5.0V单片机为:11~17MHz3.3V 单片机为:8~12MHz

10416位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0T1

113个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟

12、外部中断I/O7路,传统的下降沿中断或电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5RxD/P3.0CCP0/P1.3CCP0/P1.3

132PWM

14A/D转换,10位精度ADC,共8路,转换速度可达250K/S

15、通用全双工异步串行口(UART)

16、双串口,RxD2/P1.2TxD2/P1.3

17、工作范围:-40~85

18、封装:LQFP-48LQFP-44PDIP-40PLCC

四、温度测量原理:采用NTC热敏电阻器与一个固定电阻分压,如下图随着温度的变化,分压值也会变化,用STC12C5A60S2单片机的A/D转换器采集这个分压值,在单片机中设置一个电压与温度的对应表(这个表通过实验获得),根据采集的电压值获取对应的温度值,显示出来并保存在单片机内存中。

http://s7/mw690/0068KRmqzy6YVknPOOWb6&690

五、显示程序

            ORG 0000H

        AJMP KS         ;显示xxxx 室温xx度,11.0592MHZSTC12C5A60S2单片机 ,带时钟,可交替显示温度。88命令修改时间日期,99命令查询日期时间2016-01-27 通过

       ORG 0003H        ;XXXXXXXX-X

       RETI

        ORG 000BH

         LJMP CT

         RETI

        ORG 001BH

        RETI

 

        ORG 0023H

        AJMP S         ;接收数据转S

        A1   EQU  P0.0    ;P1.0=A          2

        B1   EQU  P0.1    ;P1.1=B          4

        C1   EQU  P0.2    ;P1.2=C          6

        D1   EQU  P0.3    ;P1.3=D          8

        G1   EQU  P2.6    ;数据输出G1=B4

        G2   EQU  P2.7  ;数据输出  G2=B5

        STB  EQU  P2.5     ;595数据锁存脉冲=L 12

        SCK  EQU  P2.4     ;595时钟输入=S    11

        R11  EQU  P2.3   ;改为81R22改为80,上下显示颠倒

        R22  EQU  P2.2

        EN   EQU  P2.1     ;138片选,行输出使NENG

        ADC_Channel_1_Result EQU 2FH

        DBUF EQU 60H

        ZS EQU 61H

        HM       EQU    1EH             ;定时器毫秒存储

        WDT_CONTR   EQU 0C1H

        AUX1      EQU    0A2H            ;AUXR1寄存器的ADRJ位是A/D转换结果寄存器(ADC_RES,ADC_RESL)的数据格式调整控制位.

;ADRJ=0时,..............................................10A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中.

        ;AUR EQU 8EH; Internal/External RAM access 内部/外部RAM存取= 0: 内部扩展的EXT_RAM可以存取.

        FLAG_1  EQU     20H.1           ;

        FLAG_2  EQU     20H.1           ;

        FLAG_3  EQU     20H.1           ;

        YEAR    EQU     28H             ;

        MONTH   EQU     29H             ;

        DAY     EQU     2AH             ;

        WEEK    EQU     2BH             ;星期

        HOUR    EQU     2CH             ;小时

        MINUTE  EQU     2DH             ;分钟

        SECOND  EQU     2EH             ;

        FLAG    EQU     27H             ;通用标志寄存器

                                        ;BIT0=1, ACK ERR

                                        ;BIT0=0,ACK OK

                                        ;BIT1=1,TEST MODE

                                        ;BIT1=0,NORMAL MODE

        P1M0 DATA 92H

        P1M1 DATA 91H

        P0M0 DATA 94H

        P0M1 DATA 93H

        P2M0 DATA 96H

        P2M1 DATA 95H

        TIMETEMP        EQU     27H     ;时间数据缓存器

        TIMETX          EQU     59H     ;时间数据发送寄存器

        TIMERX          EQU     5AH     ;时间数据接收寄存器

        SDA             EQU     0b5h    ;IICSDA口线  15

        SCL             EQU     0b7h    ;IICSCL口线  13

        LED             EQU     0B6H

        ;声明与IAP/ISP/EEPROM有关的特殊功能寄存器的地址

        IAP_DATA        EQU   0C2H

        IAP_ADDRH       EQU   0C3H

        IAP_ADDRL       EQU   0C4H

        IAP_CMD         EQU   0C5H

        IAP_TRIG        EQU   0C6H

        IAP_CONTR       EQU   0C7H

        ;定义ISP/IAP命令

        ISP_IAP_BYTE_READ   EQU   1H    ;字节读

        ISP_IAP_BYTE_PROGRAM   EQU   2H ;字节编程,可以将1写成0,要将1变成0,必须执行字节编程

        ISP_IAP_SECTOR_ERASE     EQU 3H ;扇区擦除,可以将0擦成1,要将0变成1,必须擦除整个扇区

        ;定义Flash 操作等待时间及允许IAP/ISP/EEPROM操作的常数

        ENABLE_IAP      EQU   84H     ;系统工作时钟<6MHz时,对IAP_CONTR寄存器设置此值

        ; AD转换设置

        ADC_CONTR EQU 0BCH ;ADC control register

       ; SFR name Address bit B7   B6      B5     B4       B3       B2   B1   B0

    ;ADC_CONTR BCH name ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0

        ADC_RES EQU 0BDH ;ADC high 8-bit result register

        ADC_LOW2 EQU 0BEH ;ADC low 8-bit result register

        P1ASF EQU 09DH ;P1 secondary function control register

        ADC_FLAG EQU 10H ;ADC complete flag

        ADC_Power_On_Speed_Channel_1 EQU 11100000B    ; ;B7=power,B6B5=speed,B4=flag,B3=start;B2B1B0=ch0-ch7001P1.1作为A/D输入,000P1.0输入

 

   KS:   MOV SP,#65H    ;设堆栈指针

         MOV SCon,#50h; 方式1,REN=1.SM0SM1SM2REN,TB8RB8TI,RI

         MOV TMOD,#21H;波特率发生器T1工作在模式2

 MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值) 11.0592=9600=FD          MOV TL1,#0FDH;

         MOV  TH0, #0DCH;88H      ;8800=12t,7000=stc1t

       MOV  TL0, #00H

         ORL IE, #92H  ;EA=1ES=1;ET0=1

         SETB PS        ;串口中断优先

         SETB TR1       ;启动定时器1

         SETB EN

         MOV P0M0,#00000000b      ; P1M0=0 P1M1=0双向口    P1M0=1 P1M1=0输入口    P1M0=0 P1M1=1推挽输出20ma

         MOV P0M1,#00000000b

         MOV P2M0,#00000000b      ; P1M0=0 P1M1=0双向口    P1M0=1 P1M1=0输入口    P1M0=0 P1M1=1推挽输出20ma

         MOV P2M1,#00000000b

         MOV   ADC_CONTR, #ADC_Power_On_Speed_Channel_1;AD转换设置

         ;ANL AUX1,#11111011B   ;ADRJ = 0

         LCALL INIT_ADC

         MOV WDT_CONTR ,#27H;;;;;;看门狗设置使能

 Q:        MOV A,#0;FFH

        MOV R2,#64D     ;清数据区

        MOV R0,#20H

  QING:  MOV @R0,A      ;清数据区

        INC R0

        DJNZ R2,QING

         LCALL   TIMESTATUS_INT12        ;24小时制

         LCALL READ_TIME   ;

         MOV WDT_CONTR ,#17H;喂狗CLR EN

          SETB TR0           ;启动定时器0

 Q1:      SETB G1

          SETB G2          ;G1,G2送数显示绿色

          SETB R11

          SETB R22         ;R11R22送数显示红色

          CLR LED

 T1:      MOV R3,#00H      ;行扫描R3控制行数从0000000000010000,ABCD的变化给138译码0F扫描16行,当10时扫描结束

          MOV   DPTR ,  #TABSZ    ;取数字

          MOV R2,#160

          CLR EN                ;138片选,行输出使能

          MOV A,SECOND;根据秒数据交替显示

          ANL A,#0FH

          SUBB A,#5

          JNC ZJ1

          AJMP ZJ2

   ZJ1:    MOV A,R2        ;取“温“字数据首址+1

           ADD A,#96

           INC DPH

           ACALL YUE

           DEC DPH

           ACALL HOU           ;取时数据首址 1调显示

 

           MOV A,R2        ;取“温“字数据首址+1

           ADD A,#97

           INC DPH

           ACALL YUE

           DEC DPH

 

           MOV A,HOUR         ;取时数据首址低字节

           ANL A,#0FH

           ACALL HOU1         ;2          调显示

 

           MOV A,R2        ;""字数据首址

           ADD A,#128

           INC DPH

           ACALL YUE

           DEC DPH

 

           MOV A,MINUTE      ;取分数据首址

           ACALL HOU2         ;3调显示

 

           MOV A,R2        ;""字数据首址+1

           ADD A,#129

           INC DPH

           ACALL YUE

           DEC DPH

           MOV A,MINUTE      ;""数据首址+1

           ANL A,#0FH

           ACALL HOU3       ;4调显示

 

           MOV A,ADC_Channel_1_Result

           MOV R5,A          ;A/D结果送R5

           LCALL HEX2BCD  ;影响单元:R0,R1,R6 R1A/D结果转换成BCD的十位和个位

           ACALL MON0

 

           MOV A,SECOND        ;取秒数据首址

           ACALL HOU0          ; 5调显示

 

           MOV A,ADC_Channel_1_Result

           MOV R5,A          ;A/D结果送R5

           LCALL HEX2BCD  ;影响单元:R0,R1,R6 R1A/D结果转换成BCD的十位和个位

           ANL A,#0FH

           ACALL MON1        ;

 

           MOV A,SECOND        ;取秒数据首址+1

           ANL A,#0FH

           ACALL HOU1        ;6       调显示

 

           MOV A,R2        ;""字数据首址+1

           ADD A,#128

           INC DPH

           ACALL YUE

           DEC DPH

 

           MOV A,R2        ;"-"字数据首址

           ADD A,#64

           ACALL SHI         ;7           调显示

 

           MOV A,R2        ;""字数据首址+1

           ADD A,#129

           INC DPH

           ACALL YUE

           DEC DPH

 

           MOV A,WEEK       ;取星期数据首址+1

           ANL A,#0FH

           ACALL HOU3       ;8       调显示

 

           INC R2

           INC DPTR

 

           SETB    STB

           NOP

           CLR     STB

 

           MOV A,R3                  ;138地址ABCD

           MOV P0,A                  ;P2.0-P2.3=ABCD

           INC R3

           MOV A,R3

           XRL A,#10H            ;00-08是前8行,08-10H是后8;

           JNZ ZJ1              ;送前16

           MOV WDT_CONTR ,#17H;喂狗CLR EN

           JNB FLAG_1,TZ0

           CALL FS1

TZ0:       AJMP T1

 

   ZJ2:   ACALL MON           ;取月数据首址

          ACALL HOU           ;取时数据首址 调显示

 

          MOV A,MONTH         ;取月数据首址+1,第二位

          ANL A,#0FH

          ACALL MON1

 

           MOV A,HOUR         ;取时数据首址+1

           ANL A,#0FH

           ACALL HOU1         ;2          调显示

 

           MOV A,R2;#160

           ACALL YUE         ;取“月”字数据首址

 

           MOV A,MINUTE      ;取分数据首址

           ACALL HOU2;0         ;调显示

 

           MOV A,R2        ;取“月”字数据首址+1

           ADD A,#01H

           ACALL YUE

 

           MOV A,MINUTE      ;""数据首址+1

           ANL A,#0FH

           ACALL HOU3;1        ;6            调显示

 

           MOV A,DAY         ;取日数据首址

           ACALL MON0        ;5

 

           MOV A,SECOND        ;取秒数据首址

           ACALL HOU0          ; 调显示

 

           MOV A,DAY         ;取日数据首址+1

           ANL A,#0FH

           ACALL MON1

 

           MOV A,SECOND        ;取秒数据首址+1

           ANL A,#0FH

           ACALL HOU1        ;8       调显示

 

           MOV A,#32        ;取日字的汉字点阵首址

           ADD A,R2

           ACALL YUE

 

          ; MOV A,WEEK        ;取星期数据首址

           ;ACALL HOU2;0         ; 调显示

           MOV A,R2        ;"-"字数据首址

           ADD A,#64

           ACALL SHI         ;7           调显示

 

           MOV A,#33       ;取日字的汉字点阵首址+1

           ADD A,R2

           ACALL YUE

 

           MOV A,WEEK       ;取星期数据首址+1

           ANL A,#0FH

           ACALL HOU3 ;1       ;8       调显示

 

           INC R2

           ;DEC DPH

           INC DPTR

 

           SETB    STB

           NOP

           CLR     STB

 

           MOV A,R3                  ;138地址ABCD

           MOV P0,A                  ;P2.0-P2.3=ABCD

           INC R3

           MOV A,R3

           XRL A,#10H            ;00-08是前8行,08-10H是后8;

           JNZ ZJ2              ;送前16

           MOV WDT_CONTR ,#17H;喂狗CLR EN

           JNB FLAG_1,TZ3

           CALL FS1

 

TZ3:       AJMP T1

MON:       MOV A,MONTH

MON0:      ANL A,#0F0H

           SWAP A

MON1:      MOV B,#10H

           MUL AB        ;B放结果高8位,A放结果低8

           MOVC  A, @A+DPTR ;16*16点阵,每行显示4个汉字,32条水平线,(1个汉字占16条水平线)2行显示8个汉字,所以先取第一行的一个字节,显示半个汉字(牡)

           CPL A                      ;再跳过8个字节(4个汉字)取第二行1个字节数据(校)

           MOV R6,A

           RET

HOU:       MOV A,HOUR

HOU0:      ANL A,#0F0H

           SWAP A

HOU1:      MOV B,#10H

           MUL AB

           MOVC  A, @A+DPTR ;16*16点阵,每行显示4个汉字,32条水平线,(1个汉字占16条水平线)2行显示8个汉字,所以先取第一行的一个字节,显示半个汉字(牡)

           CPL A                      ;再跳过8个字节(4个汉字)取第二行1个字节数据(校)

           MOV R4,A

           ACALL BIN        ;BIN2显示绿色

           RET

 

HOU2:      ANL A,#0F0H

           SWAP A

HOU3:      MOV B,#10H

           MUL AB

SHI:       MOVC  A, @A+DPTR ;16*16点阵,每行显示4个汉字,32条水平线,(1个汉字占16条水平线)2行显示8个汉字,所以先取第一行的一个字节,显示半个汉字(牡)

           CPL A                      ;再跳过8个字节(4个汉字)取第二行1个字节数据(校)

           MOV R4,A

           ACALL BIN2        ;BIN2显示绿色

           RET

YUE:       ;MOV A,R2

           MOVC  A, @A+DPTR ;

           CPL A

           MOV R6,A

           RET

 

BIN:    MOV  R5, #08H   ;G1G2,或R11R22中写一个字节数据

BIN1:   RLC  A

       ; MOV  R11, C   ;写上半屏红色

        MOV  G1, C     ;写上半屏红色

        MOV R4,A

        MOV A,R6

        RLC A

       ; MOV R22,C    ;下半屏红色

        MOV R22, C     ;下半屏绿色

        MOV R6,A

        MOV A,R4

        SETB  SCK

        NOP;CALL SDELAY

        NOP

        NOP

        CLR SCK

        DJNZ  R5,  BIN1

        RET

BIN2:   MOV  R5, #08H   ;G1G2,或R11R22中写一个字节数据

BIN3:   RLC  A

        MOV  G1, C      ;G1

        MOV R4,A

        MOV A,R6

        RLC A

        MOV R22,C    ;下半屏红色G1 R22 红色的日

        MOV R6,A

        MOV A,R4

        SETB  SCK

        NOP

        NOP

        CLR SCK

        DJNZ  R5,  BIN3

 

        RET


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有