?? led漢字顯示_移位寄存器方式(595)程序成功.txt
字號:
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 + -