久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1518|回復: 0
打印 上一主題 下一主題
收起左側

STM32C8T6單片機匯編驅動LCD1602示例程序

[復制鏈接]
跳轉到指定樓層
樓主
制作出來的實物圖如下:


單片機匯編語言源程序如下:
  1. *************12864亮屏程序 stm32f103c8t6*************************
  2. *************************************************************************
  3. *12864_RS位A10,ODR位帶別名                0X422101A8                                
  4. *12864_RW位A09,ODR位帶別名                0X422101A4
  5. *12864_EN位A08,ODR位帶別名                0X422101A0
  6. *12864_BUSY_BIT        位GPIOA_IDR07  別名        0X4221011C        忙標志位
  7. *RCC_APB2ENR地址 0X40021018
  8. *GPIOA_CRL地址        0X40010800
  9. *GPIOA_CRH地址        0X40010804
  10. *GPIOA_ODR地址        0X4001080C
  11. *GPIOA_IDR地址        0X40010808
  12. *GPIOA_00地址        0X42210180
  13. *************************************************************************
  14. RCC_APB2ENR        EQU        0X40021018
  15. GPIOA_CRL        EQU        0X40010800
  16. GPIOA_CRH        EQU        0X40010804
  17. GPIOA_ODR        EQU        0X4001080C
  18. LCD12864_RS        EQU        0X422101A8
  19. LCD12864_RW        EQU        0X422101A4
  20. LCD12864_EN        EQU        0X422101A0        
  21. LCD12864_BUSY_BIT        EQU                0X4221011C
  22. GPIOA_00        EQU        0X42210180
  23.         AREA        ICODE,CODE
  24.         ENTRY
  25.         EXPORT        __main
  26. __main
  27.         BL        SYSTEM_BIOS                        ;調用系統設置
  28.         BL        LCD12864INIT                ;調用屏幕初始化
  29. LOO
  30.         MOV        R3,#0X80                        ;12864第一格
  31.         BL        LCD12864WRITE_CMD        ;
  32.         MOV        R4,#0X41                        ;顯示字符A
  33.         BL        LCD12864WRITE_DAT
  34. LOOP        B        LOO

  35. *************系統設置子程序********************
  36. SYSTEM_BIOS        
  37.         PUSH        {LR}
  38.         LDR        R0,=RCC_APB2ENR                ;打開RCC_APB2ENR
  39.         MOV        R1,#0X0000000C                ;打開GPIOA時鐘
  40.         STR        R1,[R0]                                
  41.         
  42.         LDR        R0,=GPIOA_CRL                ;設置GPIOA低8位為輸出
  43.         MOV        R1,#0X33333333               
  44.         STR        R1,[R0]
  45.         
  46.         LDR        R0,=GPIOA_CRH                ;設置GPIOA_08_09_10為輸出
  47.         MOV        R1,#0X00000333               
  48.         STR        R1,[R0]
  49.         
  50.         LDR        R0,=LCD12864_EN                ;設置12864_EN為0
  51.         MOV        R1,#0               
  52.         STR        R1,[R0]
  53.         POP        {LR}        
  54.         BX LR                        ;子程序返回語句
  55. SYSTEM_BIOS_END                                ;返回

  56. *************LCD12864初始化子程序********************
  57. LCD12864INIT
  58.         PUSH        {LR}
  59.         MOV        R3,#0X38
  60.         BL        LCD12864WRITE_CMD
  61.         MOV        R3,#0X38
  62.         BL        LCD12864WRITE_CMD
  63.         MOV        R3,#0X0C        
  64.         BL        LCD12864WRITE_CMD
  65.         MOV        R3,#0X06
  66.         BL        LCD12864WRITE_CMD
  67.         MOV        R3,#0X01
  68.         BL        LCD12864WRITE_CMD
  69.         POP        {LR}
  70.         BX LR
  71. LCD12864INIT_END                ;        子程序返回語句

  72. *************LCD12864讀狀態孫程序********************
  73. LCD12864_BUSY        
  74.         PUSH        {LR}
  75.         
  76.         LDR        R0,=LCD12864_BUSY_BIT                ;
  77.         MOV        R1,#0                ;
  78.         STR        R1,[R0]
  79.         
  80.         LDR        R0,=LCD12864_EN                ;EN=0
  81.         MOV        R1,#0               
  82.         STR        R1,[R0]
  83.         
  84.         LDR        R0,=LCD12864_RS                ;RS=0
  85.         MOV        R1,#0               
  86.         STR        R1,[R0]

  87.         LDR        R0,=LCD12864_RW                ;RW=1
  88.         MOV        R1,#1               
  89.         STR        R1,[R0]
  90.         
  91.         LDR        R0,=LCD12864_EN                ;EN=1
  92.         MOV        R1,#1               
  93.         STR        R1,[R0]
  94.         
  95. LCD12864_BUSY1

  96.         LDR        R0,=LCD12864_BUSY_BIT               
  97.         LDR        R1,[R0]                                ;讀標志
  98.         
  99.         MOVS        R0,R1                        ;顯示標志到APSR
  100.         BNE        LCD12864_BUSY1                ;標志判斷,為0重新則讀取
  101.         
  102.         LDR        R0,=LCD12864_EN                ;EN=0
  103.         MOV        R1,#0               
  104.         STR        R1,[R0]
  105.         POP        {LR}
  106.         BX LR                ;子程序返回語句               
  107. LCD12864__BUSY_END        


  108. *************LCD12864寫指令子程序********************
  109. LCD12864WRITE_CMD                        ;R3作為指令傳遞
  110.         PUSH        {LR}
  111.         LDR        R0,=LCD12864_EN                ;EN=0
  112.         MOV        R1,#0               
  113.         STR        R1,[R0]
  114.         BL        DELAY
  115.         ;BL        LCD12864_BUSY                ;調用判忙程序
  116.         
  117.         LDR        R0,=LCD12864_RS                ;RS=0
  118.         MOV        R1,#0               
  119.         STR        R1,[R0]

  120.         LDR        R0,=LCD12864_RW                ;RW=0
  121.         MOV        R1,#0               
  122.         STR        R1,[R0]
  123.         
  124.         LDR        R0,=LCD12864_EN                ;EN=1
  125.         MOV        R1,#1               
  126.         STR        R1,[R0]
  127.         
  128.         LDR        R0,=GPIOA_ODR                ;
  129.         LDR        R1,[R0]                                ;取出ODR值
  130.         LDR        R2,=0X0000FF00
  131.         AND        R1,R2                                ;ODR低八位置0
  132.         ORR        R3,R1                                ;GPIOA高八位寫入R3
  133.         STR        R3,[R0]                                ;指令寫入顯示屏
  134.         
  135.         LDR        R0,=LCD12864_EN                ;EN=0
  136.         MOV        R1,#0               
  137.         STR        R1,[R0]
  138.         POP        {LR}
  139.         BX LR;子程序返回語句
  140. LCD12864WRITE_CMD_END        
  141.         
  142. *************LCD12864寫數據孫程序********************
  143. LCD12864WRITE_DAT                        ;R4作為數據傳遞
  144.         PUSH        {LR}
  145.         LDR        R0,=LCD12864_EN                ;EN=0
  146.         MOV        R1,#0               
  147.         STR        R1,[R0]
  148.         BL        DELAY
  149.         ;BL        LCD12864_BUSY                ;調用判忙
  150.         
  151.         LDR        R0,=LCD12864_RS                ;RS=1
  152.         MOV        R1,#1               
  153.         STR        R1,[R0]

  154.         LDR        R0,=LCD12864_RW                ;RW=0
  155.         MOV        R1,#0               
  156.         STR        R1,[R0]
  157.         
  158.         LDR        R0,=LCD12864_EN                ;EN=1
  159.         MOV        R1,#1               
  160.         STR        R1,[R0]

  161.         LDR        R0,=GPIOA_ODR                ;
  162.         LDR        R1,[R0]                                ;取出ODR值
  163.         LDR        R2,=0X0000FF00
  164.         AND        R1,R2                                ;ODR低八位置0
  165.         ORR        R4,R1                                ;GPIOA高八位寫入R3
  166.         STR        R4,[R0]                                ;數據寫入顯示
  167.         
  168.         LDR        R0,=LCD12864_EN                ;EN=0
  169.         MOV        R1,#0               
  170.         STR        R1,[R0]
  171.         POP        {LR}
  172.         BX LR                                        ;子程序返回語句
  173. LCD12864WRITE_DAT_END
  174. *********************延時程序 未經計算的時間*********************************************
  175. DELAY
  176.         PUSH        {LR}
  177.         LDR        R5,=0X00001000
  178. DELAY1
  179.         SUB        R5,#0X00000001
  180.         CMP        R5,#0X00000000
  181.         BNE        DELAY1
  182.         POP        {LR}
  183.         BX        LR
  184. DELAY_END                                        ;子程序返回語句
  185.         END
復制代碼

                    
程序下載后按一下復位鍵

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线一区二区 | 一区二区三区久久 | 亚洲一区二区三区福利 | 成人国产在线视频 | 91精品一区二区三区久久久久久 | 精品久久久久一区二区国产 | 夜夜骚视频 | 国产一区二区在线免费 | 欧美精品在线一区二区三区 | 成人福利在线观看 | 国产二区视频 | 精品久久99| 精品国产欧美一区二区三区成人 | 丁香婷婷久久久综合精品国产 | 国产精品久久二区 | 国产高清一二三区 | 91在线导航| 国产精品国产精品国产专区不卡 | 久在线视频 | 在线观看涩涩视频 | 亚洲国产成人久久久 | 欧美一区2区三区4区公司二百 | 成人在线视频免费观看 | 国产午夜精品一区二区三区 | 成人免费视频网址 | 日韩一区二区在线视频 | 国产女人与拘做受视频 | 综合国产| 麻豆av一区二区三区久久 | 亚洲综合婷婷 | 欧美在线一二三 | 一区二区三区视频在线免费观看 | 精品一区二区三区在线播放 | www.啪啪.com| 99精品国产成人一区二区 | 99热在线免费 | 日本久久久一区二区三区 | 在线亚洲精品 | 国产一区二区在线视频 | 伊人导航| 久久99精品久久久久久 |