⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led汉字显示_移位寄存器方式(595)程序成功.txt

📁 多个595程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
LED汉字显示_移位寄存器方式(595)程序成功! 
有117人看过    有0人收藏过    有0人引用过    0人推荐来自luole700
始于10个月前作者为这篇作品定义的标签:
luole700     可惜我还要把这篇文章发在单片机开发这个专栏里我的希望是用ARM+DSP+CPLD做大屏幕LED点阵电视机目标似乎很远,但是我在接近着   移位寄存器方式的汉字显示优点是节省I/O口,锁存输出稳定,而且595系列的器件可以承受的电流很大,DATASHEET上说有600MA。经验证一个点点得足够亮只需要约2-3MA 所以,驱动不成问题   编程上的难点在于模拟串口,其实这里不一定要严格地模拟串口,只需要在固定时间范围内出现上升沿就可以了(数据的串入和锁存都是由上升沿触发)   要注意的地方有: 1 数据最先输入的是放到所有并列的移位寄存器的最后一个。所以在取数据的时候要把后面的提前 2 所有行列的数据全都准备完毕后在触发锁存,这样显示的汉字不会有叠影。


单片机lcd实现滚屏
 悬赏分:0 - 解决时间:2006-12-5 08:58
总体思想,如流程图等;以及利用到51单片机哪些资源?
提问者: junyingchu - 试用期 一级 最佳答案
;……………………………………………… 
;16*16显示一个汉字,向左移动 
;只能显示8个汉字,受8位控制 
;……………………………………………… 
;资源分析 
;……………………………………………… 
;R0指向数据缓存地址,R1显示地址指针,R2数据增加指向指针,R3显示扫描次数 
;R4、R5延时程序,R6扫描延时,50H作片选字,51H右片选字 
;52H、53H、54H、55H、56H屏幕流动积存器,57H第二个字首地址 
;30H~4FH显示缓存 
;……………………………………………… 
;引脚定义 
;……………………………………………… 
CLK BIT P2.0 ;74HC164清零,低电平清零 
RCK BIT P2.1 ;74HC595移出脉冲,上升沿有效 
SRCLR BIT P2.2 ;74HC595清零,低电平清零 
G BIT P2.3 ;74HC595使能输出,低电平输出 
;……………………………………………… 
;定义变量 
;……………………………………………… 
D_LIST EQU (8) ;单个数据显示时间延时,即向右流动速度 
;……………………………………………… 
;显存初始化 
;……………………………………………… 
CHULI: MOV R6,#D_LIST ;单个数据显示时间延时 
MOV R2,#0 ;定义编码数据指针,从0开始 
MOV R0,#30H ;首显存地址送R0,定义显存地址指针 
LOOP3: MOV A,R2 ;编码数据指针送A 
MOV DPTR,#TAB ;表首地址送DPTR 
MOVC A,@A+DPTR ;查表取显示编码 
MOV @R0,A ;显示编码送现显存 
INC R2 ;编码数据指针+1 
INC R0 ;指向下一地址 
CJNE R2,#32,LOOP3 ;判断是否完成一次数据刷新 
LOOP6: ACALL START ;调用显示程序作延时 
DJNZ R6,LOOP6 ;判断是否完成延时 
MOV R6,#D_LIST ;恢复延时时间 
;……………………………………………… 
;显示流动 
;……………………………………………… 
MOV 57H,#32 ;第二个字的编码首地址 
LOOP1: MOV R2,#15 ;定义数据移动指针 
MOV R0,#30H ;显存首地址送R0 
LOOP5: MOV 52H,R0 ;地址指针缓存 
INC R0 ;地址指针加1,指向下一地址 
MOV 53H,R0 ;地址指针缓存 
INC R0 ;指向下一地址 
MOV 55H,R0 ;地址指针缓存 
MOV 54H,@R0 ;取指针地址里的数据存54H 
MOV R0,52H ;取回地址指针 
MOV @R0,54H ;刷新地址指针指向地址的数据 
MOV R0,55H ;取回地址指针 
INC R0 ;地址指针+1,指向下一地址 
MOV 56H,@R0 ;取指针地址里的数据存56H 
MOV R0,53H ;取回地址指针 
MOV @R0,56H ;刷新地址指针指向地址的数据 
MOV R0,55H ;地址指针缓存 
DJNZ R2,LOOP5 ;完成15次刷新地址 
MOV DPTR,#TAB ;表首地址送DPTR 
MOV A,57H ;取回地址指针给A 
MOVC A,@A+DPTR ;查表取数 
MOV R0,#4EH ;送最后一列上地址指针 
MOV @R0,A ;A送给最后一列上地址 
INC 57H ;编码数据地址加1 
MOV A,57H ;取回地址指针给A 
MOVC A,@A+DPTR ;查表取数 
MOV R0,#4FH ;送最后一列下地址指针 
MOV @R0,A ;A送给最后一列下地址 
INC 57H ;指向下一地址 
LOOP4: ACALL START ;调用显示程序作延时 
DJNZ R6,LOOP4 ;判断是否完成延时 
MOV R6,#D_LIST ;恢复延时时间 
SJMP LOOP1 ;返回LOP1,继续刷新地址里的数据,使显示右移 
;……………………………………………… 
;显示子程序 
;……………………………………………… 
START: CLR CLK ;74HC164清零 
SETB CLK 
CLR SRCLR ;74HC595清零 
SETB SRCLR 
LOOP2: MOV R3,#16 ;扫描次数送R3 
MOV R1,#30H ;显存首地址送R1 
CLR C ;C置1 
MOV 50H,#0FFH ;左片选字 
MOV 51H,#0FFH ;右片选字 
;……………………………………………… 
LOOP: CLR RCK ;74HC595移出脉冲准备 
SETB G ;置高74HC595使能端,使输出呈高阻 

MOV A,@R1 ;取显存首地址里的是数 
MOV SCON,#00H ;选串口以方式0工作 
MOV SBUF,A ;把A从串口发送 
JNB TI,$ ;等待发送完一帧 
CLR TI ;清标志位 
INC R1 ;地址指针加1 

MOV A,@R1 ;取显存R0所指向地址里的是数 
; MOV SCON,#00H ;选串口以方式0工作 
MOV SBUF,A ;把A从串口发送 
JNB TI,$ ;等待发送完一帧 
CLR TI ;清标志位 
INC R1 ;地址指针加1 

MOV A,50H ;左片选字送A 
RRC A ;带进位位右移,选中第一列,低电平有效 
; MOV SCON,#00H ;选串口以方式0工作 
MOV SBUF,A ;把A从串口发送 
JNB TI,$ ;等待发送完一帧 
CLR TI ;清标志位 
MOV 50H,A ;左片选字送回寄存器 

MOV A,51H ;右片选字送A 
RRC A ;带进位位右移,选中第九列,低电平有效 
; MOV SCON,#00H ;选串口以方式0工作 
MOV SBUF,A ;把A从串口发送 
JNB TI,$ ;等待发送完一帧 
CLR TI ;清标志位 
MOV 51H,A ;右片选字送回寄存器 

SETB RCK ;74HC595移出脉冲呈上升沿,数据移出 
CLR G ;使能输出 

ACALL DELAY ;调延时子程序,是显示定格1ms 
DJNZ R3,LOOP 
RET 
;……………………………………………… 
;1ms延时子程序 
;……………………………………………… 
DELAY : MOV R4,#1 ;延时毫秒数送R4 
D2: MOV R5,#250 ;1ms延时值 
D1: NOP 
NOP 
DJNZ R5,D1 ;1ms延时循环 
DJNZ R4,D2 ;毫秒数减1,不等于0则继续循环,等于结束 
RET 
;……………………………………………… 
;显示编码数据 
;……………………………………………… 
TAB: DB 01H,00H,01H,00H,01H,00H,01H,00H,0FFH,0FFH,05H,02H,05H,84H,09H,48H; 
DB 09H,20H,11H,10H,21H,08H,41H,0CH,01H,06H,01H,04H,01H,00H,00H,00H;"长",0 

DB 08H,20H,08H,30H,0FFH,0E0H,08H,42H,08H,4CH,1FH,0F0H,12H,10H,12H,1AH; 
DB 13H,0F2H,10H,04H,0FFH,0C8H,10H,30H,50H,0CCH,37H,02H,12H,1CH,00H,00H;"城",1 

DB 00H,00H,00H,00H,1FH,0F0H,12H,20H,12H,20H,12H,20H,12H,20H,0FFH,0FCH; 
DB 12H,22H,12H,22H,12H,22H,12H,22H,1FH,0F2H,00H,02H,00H,0EH,00H,00H;"电",2 

DB 10H,40H,11H,80H,16H,00H,0FFH,0FFH,14H,00H,02H,04H,13H,0C8H,92H,50H; 
DB 72H,60H,1FH,0FFH,32H,40H,52H,40H,92H,48H,1EH,44H,00H,78H,00H,00H;"梯",3 

DB 00H,40H,20H,80H,21H,00H,22H,00H,27H,0FFH,2CH,90H,34H,90H,0E4H,90H; 
DB 24H,94H,24H,92H,24H,93H,27H,0FEH,20H,00H,20H,00H,20H,00H,00H,00H;"有",4 

DB 7FH,0FFH,40H,00H,4CH,40H,72H,20H,41H,0C0H,00H,00H,7FH,0FFH,52H,02H; 
DB 53H,04H,52H,0C0H,52H,30H,52H,48H,7EH,84H,00H,06H,00H,04H,00H,00H;"限",5 

DB 00H,00H,00H,80H,01H,04H,02H,0EH,0CH,14H,70H,24H,21H,0C4H,00H,8CH; 
DB 00H,08H,70H,08H,08H,28H,06H,1EH,03H,0CH,01H,80H,01H,00H,00H,00H;"公",6 

DB 00H,00H,08H,00H,49H,0F8H,49H,20H,49H,20H,49H,20H,49H,20H,49H,20H; 
DB 49H,20H,49H,0F0H,48H,00H,40H,04H,40H,02H,7FH,0FCH,00H,00H,00H,00H;"司",7 





应用演示程序:

;=====================================================
;74HC595 走马灯演示程序

;创作日期:2006/01/02
;创作者:  gguoqing
;=====================================================

         SDATA_595     EQU  P1.0    ;串行数据输入
         SCLK_595       EQU  P1.1   ;移位时钟脉冲
         RCK_595         EQU  P1.2   ;输出锁存器控制脉冲
;=====================================================

               ORG  0000H
               LJMP  MAIN
               ORG  0030H

;=====================================================
  MAIN:
                MOV  SP,#60H
                MOV  R0,#0FEH
  MAIN1:
                CALL OUT_595
                CALL  DELAY
                MOV  A,R0
                RL  A
                MOV  R0,A
                JMP  MAIN1

;----------------------------------------------------------------------
;输出锁存器输出数据子程序
;----------------------------------------------------------------------
OUT_595:
                LCALL WR_595
                CLR  RCK_595
                NOP
                NOP
                SETB RCK_595      ;上升沿将数据送到输出锁存器
                NOP
                NOP
                NOP
                CLR  RCK_595
                RET

;---------------------------------------------------------------------
;移位寄存器接收数据子程序
;---------------------------------------------------------------------
WR_595:   
                MOV R4,#08H         ;
                MOV A,R0
WR_LOOP:        
                RLC A
                MOV SDATA_595,C
                SETB SCLK_595       ;上升沿发生移位
                NOP
                NOP
                CLR SCLK_595
                DJNZ R4,WR_LOOP
                RET

;--------------------------------------------------------------------
;延时子程序
;--------------------------------------------------------------------
DELAY:       
               MOV  R5,#03H
DEL0:         
               MOV  R6,#0FFH
DEL1:         
               MOV  R7,#0FFH
               DJNZ  R7,$
               DJNZ  R6,DEL1
               DJNZ  R5,DEL0
               RET
;=====================================================
                END 
 
  
学习,学习,再学习。 
 
 
   2006-01-08 21:13 [广告] USB AVR DebugWIRE+AVRISP MKII 2合1 下载仿真器         
 
 
  
 gguoqing  
 
 
  
  等级: 蝙蝠侠
  头衔:伟纳管理员
  贴子:2466
  积分:2112
  伟纳币:480
  注册:2004-10-02 
 
 
        第 2 楼 
 
  
电路图见楼上

/******************************************************************
/*                                                                                                                                 *
/* 74HC595 走马灯演示程序                                                             *
/*                                                                                                                                 *
/* 邮箱: gguoqing@willar.com                                                                                    *
/* 网站: http://www.willar.com ;                                                                                 *
/* 作者: gguoqing                                                                                                      *
/* 时间: 2006/02/26                                                                                                  *
/*                                                                                                                                *
/*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED                   *
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!                           *
/*                                                                                                                                *
/******************************************************************/
    
#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

sbit  SDATA_595=P1^0;   //串行数据输入
sbit  SCLK_595 =P1^1;   //移位时钟脉冲
sbit  RCK_595  =P1^2;   //输出锁存器控制脉冲

uchar temp;             

/********************************************************/
/*                                                                                                            */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -