欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32C8T6單片機匯編驅動LCD1602示例程序
[打印本頁]
作者:
lyonkon
時間:
2023-5-5 09:34
標題:
STM32C8T6單片機匯編驅動LCD1602示例程序
制作出來的實物圖如下:
IMG20230505092709.jpg
(2.85 MB, 下載次數: 43)
下載附件
2023-5-5 09:31 上傳
單片機匯編語言源程序如下:
*************12864亮屏程序 stm32f103c8t6*************************
*************************************************************************
*12864_RS位A10,ODR位帶別名 0X422101A8
*12864_RW位A09,ODR位帶別名 0X422101A4
*12864_EN位A08,ODR位帶別名 0X422101A0
*12864_BUSY_BIT 位GPIOA_IDR07 別名 0X4221011C 忙標志位
*RCC_APB2ENR地址 0X40021018
*GPIOA_CRL地址 0X40010800
*GPIOA_CRH地址 0X40010804
*GPIOA_ODR地址 0X4001080C
*GPIOA_IDR地址 0X40010808
*GPIOA_00地址 0X42210180
*************************************************************************
RCC_APB2ENR EQU 0X40021018
GPIOA_CRL EQU 0X40010800
GPIOA_CRH EQU 0X40010804
GPIOA_ODR EQU 0X4001080C
LCD12864_RS EQU 0X422101A8
LCD12864_RW EQU 0X422101A4
LCD12864_EN EQU 0X422101A0
LCD12864_BUSY_BIT EQU 0X4221011C
GPIOA_00 EQU 0X42210180
AREA ICODE,CODE
ENTRY
EXPORT __main
__main
BL SYSTEM_BIOS ;調用系統設置
BL LCD12864INIT ;調用屏幕初始化
LOO
MOV R3,#0X80 ;12864第一格
BL LCD12864WRITE_CMD ;
MOV R4,#0X41 ;顯示字符A
BL LCD12864WRITE_DAT
LOOP B LOO
*************系統設置子程序********************
SYSTEM_BIOS
PUSH {LR}
LDR R0,=RCC_APB2ENR ;打開RCC_APB2ENR
MOV R1,#0X0000000C ;打開GPIOA時鐘
STR R1,[R0]
LDR R0,=GPIOA_CRL ;設置GPIOA低8位為輸出
MOV R1,#0X33333333
STR R1,[R0]
LDR R0,=GPIOA_CRH ;設置GPIOA_08_09_10為輸出
MOV R1,#0X00000333
STR R1,[R0]
LDR R0,=LCD12864_EN ;設置12864_EN為0
MOV R1,#0
STR R1,[R0]
POP {LR}
BX LR ;子程序返回語句
SYSTEM_BIOS_END ;返回
*************LCD12864初始化子程序********************
LCD12864INIT
PUSH {LR}
MOV R3,#0X38
BL LCD12864WRITE_CMD
MOV R3,#0X38
BL LCD12864WRITE_CMD
MOV R3,#0X0C
BL LCD12864WRITE_CMD
MOV R3,#0X06
BL LCD12864WRITE_CMD
MOV R3,#0X01
BL LCD12864WRITE_CMD
POP {LR}
BX LR
LCD12864INIT_END ; 子程序返回語句
*************LCD12864讀狀態孫程序********************
LCD12864_BUSY
PUSH {LR}
LDR R0,=LCD12864_BUSY_BIT ;
MOV R1,#0 ;
STR R1,[R0]
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
LDR R0,=LCD12864_RS ;RS=0
MOV R1,#0
STR R1,[R0]
LDR R0,=LCD12864_RW ;RW=1
MOV R1,#1
STR R1,[R0]
LDR R0,=LCD12864_EN ;EN=1
MOV R1,#1
STR R1,[R0]
LCD12864_BUSY1
LDR R0,=LCD12864_BUSY_BIT
LDR R1,[R0] ;讀標志
MOVS R0,R1 ;顯示標志到APSR
BNE LCD12864_BUSY1 ;標志判斷,為0重新則讀取
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
POP {LR}
BX LR ;子程序返回語句
LCD12864__BUSY_END
*************LCD12864寫指令子程序********************
LCD12864WRITE_CMD ;R3作為指令傳遞
PUSH {LR}
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
BL DELAY
;BL LCD12864_BUSY ;調用判忙程序
LDR R0,=LCD12864_RS ;RS=0
MOV R1,#0
STR R1,[R0]
LDR R0,=LCD12864_RW ;RW=0
MOV R1,#0
STR R1,[R0]
LDR R0,=LCD12864_EN ;EN=1
MOV R1,#1
STR R1,[R0]
LDR R0,=GPIOA_ODR ;
LDR R1,[R0] ;取出ODR值
LDR R2,=0X0000FF00
AND R1,R2 ;ODR低八位置0
ORR R3,R1 ;GPIOA高八位寫入R3
STR R3,[R0] ;指令寫入顯示屏
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
POP {LR}
BX LR;子程序返回語句
LCD12864WRITE_CMD_END
*************LCD12864寫數據孫程序********************
LCD12864WRITE_DAT ;R4作為數據傳遞
PUSH {LR}
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
BL DELAY
;BL LCD12864_BUSY ;調用判忙
LDR R0,=LCD12864_RS ;RS=1
MOV R1,#1
STR R1,[R0]
LDR R0,=LCD12864_RW ;RW=0
MOV R1,#0
STR R1,[R0]
LDR R0,=LCD12864_EN ;EN=1
MOV R1,#1
STR R1,[R0]
LDR R0,=GPIOA_ODR ;
LDR R1,[R0] ;取出ODR值
LDR R2,=0X0000FF00
AND R1,R2 ;ODR低八位置0
ORR R4,R1 ;GPIOA高八位寫入R3
STR R4,[R0] ;數據寫入顯示
LDR R0,=LCD12864_EN ;EN=0
MOV R1,#0
STR R1,[R0]
POP {LR}
BX LR ;子程序返回語句
LCD12864WRITE_DAT_END
*********************延時程序 未經計算的時間*********************************************
DELAY
PUSH {LR}
LDR R5,=0X00001000
DELAY1
SUB R5,#0X00000001
CMP R5,#0X00000000
BNE DELAY1
POP {LR}
BX LR
DELAY_END ;子程序返回語句
END
復制代碼
程序下載后按一下復位鍵
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1