历史上的今天
今天是:2024年10月19日(星期六)
2019年10月19日 | PIC单片机的LCD例程1
2019-10-19 来源:eefocus
; LCD_F84.ASM _SER_DATA EQU _MAX_VAR-0 ; 4F _TEMP1 EQU _MAX_VAR-3 ; 4C _H EQU _MAX_VAR-3 ; 4C _TH EQU _MAX_VAR-5 ; 4A _SAVE_W EQU _MAX_VAR-9 ; 46 _LOOP1 EQU _MAX_VAR-1 ; used for pace timing, same location as _SER_LOOP _N_MSEC EQU _MAX_VAR-0B ; 44 ORG 300H LCD_BCD_WORD: ; displays a natural binary word in locations 41 and 42 MOVF 41H, W CLRF _TH SWAPF _TH, W SWAPF _TE, W GOTO _RETURN CLRF _UN CLRF _TE CLRF _HU INCF _TH, F LCD_RESET: BSF STATUS, RP0 MOVLW .10 MOVLW 0CH MOVLW .10 MOVLW .4 ; one second delay _RESET_3: MOVLW 0CH GOTO _RETURN LCD_DELAY: ; delays number of msecs in W MOVF _SAVE_W, W ; get W GOTO _RETURN LCD_DEBUG: MOVLW 0CH ; clear the LCD MOVLW "W" ; W= MOVLW " " BTFSS _SAVE_STAT, Z MOVLW " " BTFSS _SAVE_STAT, C MOVLW 0DH ; go to second line MOVLW 0DH ; go to third line MOVLW 10H ; initialize pointer to RAM location 10 MOVLW .4 ; same for 14, 15, 16 and 17 CALL _DELAY_N ; 250 msecs GOTO _RETURN MOVF _SAVE_W, W ; get back W MOVLW .3 ; page 3 MOVF _TEMP1, W MOVF _TEMP2, W _HEX_LOOK: LCD_CHAR: ; outputs character in W to LCD MOVF _SAVE_W, W ; get back W _SEROUT: ; transmits content of W at 9600 Baud MOVWF _SER_DATA BSF STATUS, RP0 ; make TX bit an output MOVLW .255 MOVLW .9 BCF STATUS, C ; set C to 0, start bit _SEROUT2: MOVLW .31 ;NOP ; CHANGE BCF PORTA, TX ; send stop bit _DELAY_N: ; delays number of msecs specified in _N_MSEC _RETURN: RETURN
; LCD_RESET - provides a means for the user to manually reset the LCD
; - brings RA.0 (serial lead) low for 2.5 secs. During this
; time, the user should manually reset the LCD.
; - routine then clears the LCD and ouptuts ten dots.
; - LCD is then cleared again.
; - W and STATUS are saved.
; LCD_DEBUG
; - displays W content and the state of the Z and C flags on line 1.
; - prints value of location 40H as a character on line 2.
; - displays values of locations 10, 11, 12, 13 on line 3.
; - locations 14, 15, 16, 17 on line 4.
; - this is followed by a one second delay.
; - the W and STATUS registers are saved and restored in returning
; to the calling program.
;
; LCD_CHAR - displays character in W on LCD. W and STATUS are saved.
; LCD_VAL - converts value in W to two hex characters and displays on LCD.
;
; LCD_BCD_WORD - displays quantity in 41H and 42H as unsigned decimal
; quantity. Note, this is limited to 9999 decimal.
;PIC单片机学习网www.pic16.com
; LIST p=16f84
; #include
; __CONFIG 11h
RADIX HEX
CONSTANT _MAX_VAR=4FH
CONSTANT TX=0 ; PORTA, Bit 0
_SER_LOOP EQU _MAX_VAR-1 ; 4E
_SER_TIME EQU _MAX_VAR-2 ; 4D
_TEMP2 EQU _MAX_VAR-4 ; 4B
_L EQU _MAX_VAR-4 ; 4B
_HU EQU _MAX_VAR-6 ; 49
_TE EQU _MAX_VAR-7 ; 48
_UN EQU _MAX_VAR-8 ; 47
_SAVE_STAT EQU _MAX_VAR-0A ; 45
_LOOP2 EQU _MAX_VAR-2 ; used for pace timing, same location as _SER_TIME
_N1 EQU _MAX_VAR-0C ; 43
; in decimal.
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F ; status saved in true form
MOVWF _H
MOVF 42H, W
MOVWF _L
CLRF _HU
CLRF _TE
CLRF _UN
_BCD_1:
MOVLW .1
SUBWF _L, F
BTFSC STATUS, C ; a borrow occurred
GOTO _INC_DEC
MOVLW .1
SUBWF _H, F
BTFSC STATUS, C
GOTO _INC_DEC
IORWF _HU, W
CALL _LCD_VAL
IORWF _UN, W
CALL _LCD_VAL
_INC_DEC:
CLRWDT
INCF _UN, F
MOVLW .10
SUBWF _UN, W
BTFSS STATUS, Z
GOTO _BCD_1
INCF _TE, F
MOVLW .10
SUBWF _TE, W
BTFSS STATUS, Z
GOTO _BCD_1
INCF _HU, F
MOVLW .10
SUBWF _HU, W
BTFSS STATUS, Z
GOTO _BCD_1
GOTO _BCD_1
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F ; save in true form
BCF TRISA, 0
BCF STATUS, RP0
BCF PORTA, 0 ; output a zero to LCD
MOVWF _N1
_RESET_1:
MOVLW .250
MOVWF _N_MSEC
CALL _DELAY_N
DECFSZ _N1, F
GOTO _RESET_1
CALL _LCD_CHAR
MOVWF _N1
_RESET_2:
MOVLW "."
CALL _LCD_CHAR
DECFSZ _N1, F
GOTO _RESET_2
MOVWF _N1
MOVLW .250
MOVWF _N_MSEC
CALL _DELAY_N
DECFSZ _N1, F
GOTO _RESET_3
CALL _LCD_CHAR
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F ; save in true form
MOVWF _N_MSEC
CALL _DELAY_N
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F
CALL _LCD_CHAR
CALL _LCD_CHAR
MOVLW "="
CALL _LCD_CHAR
MOVF _SAVE_W, W ; display value of W in hex
CALL _LCD_VAL
CALL _LCD_CHAR
MOVLW "Z" ; Z=
CALL _LCD_CHAR
MOVLW "="
CALL _LCD_CHAR
MOVLW "0"
BTFSC _SAVE_STAT, Z
MOVLW "1"
CALL _LCD_CHAR ; display either a zero or one
CALL _LCD_CHAR
MOVLW "C" ; C=
CALL _LCD_CHAR
MOVLW "="
CALL _LCD_CHAR
MOVLW "0"
BTFSC _SAVE_STAT, C
MOVLW "1"
CALL _LCD_CHAR ; display either a zero or a one
CALL _LCD_CHAR
MOVLW 0AH
CALL _LCD_CHAR
MOVF 40H, W ; display location 40H as a char
CALL _LCD_CHAR
CALL _LCD_CHAR
MOVLW 0AH
CALL _LCD_CHAR
MOVWF FSR
MOVLW .4 ; four values on line
MOVWF _N1
_DEBUG_1:
MOVF INDF, W
CALL _LCD_VAL ; display values in loc 10, 11, 12, 13
INCF FSR, F
MOVLW " "
CALL _LCD_CHAR
DECFSZ _N1, F
GOTO _DEBUG_1
MOVLW 0DH ; go to 4th line
CALL _LCD_CHAR
MOVLW 0AH
CALL _LCD_CHAR
MOVWF _N1
_DEBUG_2:
MOVF INDF, W
CALL _LCD_VAL
MOVLW " "
CALL _LCD_CHAR
INCF FSR, F
DECFSZ _N1, F
GOTO _DEBUG_2
MOVLW .250
MOVWF _N_MSEC
CALL _DELAY_N
CALL _DELAY_N
CALL _DELAY_N
LCD_VAL: ; converts byte in W to two characters and outputs
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F ; save it in true form
_LCD_VAL:
MOVWF _TEMP1 ; save a copy of W
MOVF PCLATH, W
MOVWF _TEMP2 ; save PCLATH
MOVWF PCLATH
SWAPF _TEMP1, W ; high nibble now in lo nibble of W
ANDLW 0FH ;
CALL _HEX_LOOK
CALL _SEROUT
ANDLW 0FH
CALL _HEX_LOOK
CALL _SEROUT
MOVWF PCLATH ; previous value of PCLATH
GOTO _RETURN
ADDWF PCL, F
DT "0", "1", "2", "3", "4", "5", "6", "7"
DT "8", "9", "A", "B", "C", "D", "E", "F"
MOVWF _SAVE_W ; save W and STATUS
SWAPF STATUS, W
MOVWF _SAVE_STAT
SWAPF _SAVE_STAT, F ; save in true form
_LCD_CHAR:
CALL _SEROUT
MOVLW .10
MOVWF _N_MSEC
CALL _DELAY_N
GOTO _RETURN
BCF TRISA, TX ;
BCF STATUS, RP0
BCF PORTA, TX ; set to stop bit
MOVWF _SER_TIME ; be sure stop bit has been high present
_SEROUT1: ; for some time
DECFSZ _SER_TIME, F
GOTO _SEROUT1
MOVWF _SER_LOOP
BTFSC STATUS, C
BCF PORTA, TX ; send a one
BTFSS STATUS, C
BSF PORTA, TX ; or a zero
MOVWF _SER_TIME ; one bit delay. 104 usecs at 9600 baud
_SEROUT3:
DECFSZ _SER_TIME, F
GOTO _SEROUT3
RRF _SER_DATA, F ; least sign bit now in C
DECFSZ _SER_LOOP, F ; does not affect status
GOTO _SEROUT2 ; next character
RETURN
MOVF _N_MSEC, W
MOVWF _LOOP1
_DELAY_1:
MOVLW .247 ; close to 1.0 msec delay when set to .247
MOVWF _LOOP2
_DELAY_2:
CLRWDT
DECFSZ _LOOP2, F ; decrement and leave result in LOOP2
; skip next statement if zero
GOTO _DELAY_2
DECFSZ _LOOP1, F
GOTO _DELAY_1
RETURN
SWAPF _SAVE_STAT, W
MOVWF _TEMP2
SWAPF _TEMP2, W
MOVWF STATUS
SWAPF _SAVE_W, W ; get back W without altering STATUS
MOVWF _TEMP2
SWAPF _TEMP2, W
史海拾趣
|
这是从网上找到的MC9S08JM60单片机USB部分的翻译,该单片机是飞思卡尔推出的集成USB的S08单片机,对于需要实现USB连接的项目来说,是不错的选择。翻译的不是很好,有的地方还是要参考英文手册 … 查看全部问答> |
|
vc 添加程序的快捷方式到启动菜单里[转载http://blog.sina.com.cn/s/blog_5fd6e7ac01 vc 添加程序的快捷方式到启动菜单里#include <io.h>HRESULT CCreatescDlg::CreateLink(LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc){ HRESULT hres; IShellLink* psl; h ...… 查看全部问答> |
|
底薪 + 提成 + 分红 请Linux Wince 软硬件合作高手 行业PDA研发、销售 ARM7 ARM9 ARM11硬件平台 WINCE LINUX软件平台 QQ:1459635026 广东地区为佳。… 查看全部问答> |
|
window ce 系统下怎么访问 pc机上的oracle数据库! window ce 系统下怎么访问 pc机上的oracle数据库!我用的是vs2008,poketpc是windows mobile 5.0,不知那位高人能给解决。… 查看全部问答> |
|
我的液晶是汉升19264-6的,驱动芯片是ks0108,我写了个驱动程序,怎么驱动不起来呢 下面是我的程序,是用STC52RC 驱动的,硬件检查过多次,绝对正确,哪位帮忙看看我的程序那有问题,显示不出来,谢谢。 #include\"reg52.h\" #include\"intrins.h\" #define uint unsigned int #define uchar unsigned char sbit E ...… 查看全部问答> |
|
请教关于奇晶的2.83寸OLED显示屏:C0283QGLC-T(采用的是S6E63D6驱动IC)的驱动问题----有人做过么? 原来用的三星的LMS283显示屏,最近停产了,不得不从新找屏做驱动。 新找来的奇晶的LCD,修改了硬件电路和spi初始化配置,点亮-进入系统都没有问题,但是象素上 发现了一个奇怪的问题: 颜色显示都基本正确,红.绿.蓝都还可以。 ...… 查看全部问答> |
|
如果我有空我也会过来贴点东西。 这个板子全套开源的批量生产的东西,都已经发布了。 显卡ipcore虽然没发布,但网上有放多现成的,直接抄过来就能用,学习够了。 以后谁看到我发布的开源版,或者俺心情好了,或许过来发布一下。 在eeworld斑竹 ...… 查看全部问答> |




