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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

OLED IIC四腳0.96寸 51單片機匯編程序分享 仿真+實物測試

[復制鏈接]
跳轉到指定樓層
樓主
這學期學的51單片機匯編,清明沒事寫了個OLED的程序,歡迎批評指正。代碼是照著一個c程序抄的,我會放到附件里,用到的資料都會放到附件里,歡迎批評指正。

單片機匯編源程序如下:
  1. SCL BIT P1.0                ;引腳定義
  2. SDA BIT P1.1

  3. ORG 00H
  4.         JMP START                ;跳轉到主函數
  5. ORG 100H
  6. START:
  7.         MOV SP,#30H                ;設置堆棧指針
  8.         ACALL INIT                ;初始化OLED
  9.         
  10. MAIN:
  11.         ;顯示白屏
  12.         MOV A,#0FFH               
  13.         ACALL FILL
  14.         ;設置字符串顯示
  15.         MOV R1,#10                ;字符串列起始位置,單位:像素
  16.         MOV R0,#2H                ;字符串行起始位置,單位:行(共0-7,8行)
  17.         MOV R2,#72                ;字符串長度,單位:像素
  18.         MOV DPTR,#PIC        ;傳入圖像地址
  19.         ACALL SHOW
  20.         ;暫停程序
  21.         JMP $

  22. INIT:
  23.         ;Write_IIC_Command(0xAE);   //display off
  24.         MOV A,#0AEH
  25.         ACALL TRANS_CMD
  26.         ;Write_IIC_Command(0x20);        //Set Memory Addressing Mode        
  27.         MOV A,#20H
  28.         ACALL TRANS_CMD
  29.         ;Write_IIC_Command(0x10);        //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  30.         MOV A,#10H
  31.         ACALL TRANS_CMD
  32.         ;Write_IIC_Command(0xb0);        //Set Page Start Address for Page Addressing Mode,0-7
  33.         MOV A,#0B0H
  34.         ACALL TRANS_CMD
  35.         ;Write_IIC_Command(0xc8);        //Set COM Output Scan Direction
  36.         MOV A,#0C8H
  37.         ACALL TRANS_CMD
  38.         ;Write_IIC_Command(0x00);//---set low column address
  39.         MOV A,#00H
  40.         ACALL TRANS_CMD
  41.         ;Write_IIC_Command(0x10);//---set high column address
  42.         MOV A,#10H
  43.         ACALL TRANS_CMD
  44.         ;Write_IIC_Command(0x40);//--set start line address
  45.         MOV A,#40H
  46.         ACALL TRANS_CMD
  47.         ;Write_IIC_Command(0x81);//--set contrast control register
  48.         MOV A,#81H
  49.         ACALL TRANS_CMD
  50.         ;Write_IIC_Command(0xdf);
  51.         MOV A,#0DFH
  52.         ACALL TRANS_CMD
  53.         ;Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
  54.         MOV A,#0A1H
  55.         ACALL TRANS_CMD
  56.         ;Write_IIC_Command(0xa6);//--set normal display
  57.         MOV A,#0A6H
  58.         ACALL TRANS_CMD
  59.         ;Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
  60.         MOV A,#0A8H
  61.         ACALL TRANS_CMD
  62.         ;Write_IIC_Command(0x3F);//
  63.         MOV A,#3FH
  64.         ACALL TRANS_CMD
  65.         ;Write_IIC_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  66.         MOV A,#0A4H
  67.         ACALL TRANS_CMD
  68.         ;Write_IIC_Command(0xd3);//-set display offset
  69.         MOV A,#0D3H
  70.         ACALL TRANS_CMD
  71.         ;Write_IIC_Command(0x00);//-not offset
  72.         MOV A,#00H
  73.         ACALL TRANS_CMD
  74.         ;Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
  75.         MOV A,#0D5H
  76.         ACALL TRANS_CMD
  77.         ;Write_IIC_Command(0xf0);//--set divide ratio
  78.         MOV A,#0F0H
  79.         ACALL TRANS_CMD
  80.         ;Write_IIC_Command(0xd9);//--set pre-charge period
  81.         MOV A,#0D9H
  82.         ACALL TRANS_CMD
  83.         ;Write_IIC_Command(0x22); //
  84.         MOV A,#22H
  85.         ACALL TRANS_CMD
  86.         ;Write_IIC_Command(0xda);//--set com pins hardware configuration
  87.         MOV A,#0DAH
  88.         ACALL TRANS_CMD
  89.         ;Write_IIC_Command(0x12);
  90.         MOV A,#12H
  91.         ACALL TRANS_CMD
  92.         ;Write_IIC_Command(0xdb);//--set vcomh
  93.         MOV A,#0DBH
  94.         ACALL TRANS_CMD
  95.         ;Write_IIC_Command(0x20);//0x20,0.77xVcc
  96.         MOV A,#20H
  97.         ACALL TRANS_CMD
  98.         ;Write_IIC_Command(0x8d);//--set DC-DC enable
  99.         MOV A,#8DH
  100.         ACALL TRANS_CMD
  101.         ;Write_IIC_Command(0x14);//
  102.         MOV A,#14H
  103.         ACALL TRANS_CMD
  104.         ;Write_IIC_Command(0xaf);//--turn on oled panel
  105.         MOV A,#0AFH
  106.         ACALL TRANS_CMD
  107.         RET
  108.         
  109. ;開始傳輸
  110. START_TRANS:
  111.         SETB SCL
  112.         SETB SDA
  113.         CLR SDA
  114.         CLR SCL
  115.         RET
  116.         
  117. ;結束傳輸
  118. CLOSE_TRANS:
  119.         CLR SCL
  120.         CLR SDA
  121.         SETB SCL
  122.         SETB SDA
  123.         CLR SDA
  124.         CLR SCL
  125.         RET

  126. ;傳輸,影響R0,ACC寄存器,將ACC的數據按位傳輸
  127. TRANS:
  128.         MOV R0,#8H
  129. TRA1:
  130.         RLC A
  131.         MOV SDA,C
  132.         SETB SCL
  133.         CLR SCL
  134.         DJNZ R0,TRA1
  135.         SETB SDA
  136.         SETB SCL
  137.         CLR SCL
  138.         RET
  139.         
  140. ;傳輸指令,將ACC的數據作為指令傳出
  141. TRANS_CMD:
  142.         PUSH ACC
  143.         ACALL START_TRANS
  144.         MOV A,#78H
  145.         ACALL TRANS
  146.         MOV A,#00H
  147.         ACALL TRANS
  148.         POP ACC
  149.         ACALL TRANS
  150.         ACALL CLOSE_TRANS
  151.         RET
  152.         
  153. ;傳輸數據,將ACC的數據作為數據傳出
  154. TRANS_DATA:
  155.         PUSH ACC
  156.         ACALL START_TRANS
  157.         MOV A,#78H
  158.         ACALL TRANS
  159.         MOV A,#40H
  160.         ACALL TRANS
  161.         POP ACC
  162.         ACALL TRANS
  163.         ACALL CLOSE_TRANS
  164.         RET
  165.         
  166. ;將ACC的數據刷屏,影響ACC,R0,R1,R2寄存器
  167. FILL:
  168.         PUSH ACC
  169.         MOV A,#8H
  170. FILL1:
  171.         MOV R0,#0B0H
  172.         DEC A
  173.         MOV R2,A
  174.         ADD A,R0
  175.         ACALL TRANS_CMD
  176.         MOV A,#0H
  177.         ACALL TRANS_CMD
  178.         MOV A,#10H
  179.         ACALL TRANS_CMD
  180.         MOV R1,#128
  181. FILL2:
  182.         POP ACC
  183.         PUSH ACC
  184.         ACALL TRANS_DATA
  185.         DJNZ R1,FILL2
  186.         MOV A,R2
  187.         JNZ FILL1
  188.         DEC SP
  189.         RET

  190. ;將指定的圖像顯示到指定位置,R0:指定行,R1:指定列,R2:圖像長度,DPTR:圖像位置
  191. SHOW:
  192.         DEC R0
  193.         MOV A,#0B0H
  194.         ADD A,R0
  195.         ACALL TRANS_CMD
  196.         MOV A,R1
  197.         ANL A,#0FH
  198.         ACALL TRANS_CMD
  199.         MOV A,R1
  200.         ANL A,#0F0H
  201.         SETB C
  202.         RRC A
  203.         RRC A
  204.         RRC A
  205.         RRC A
  206.         ACALL TRANS_CMD
  207. SHOW1:
  208.         CLR A
  209.         MOVC A,@A+DPTR
  210.         ACALL TRANS_DATA
  211.         INC DPTR
  212.         DJNZ R2,SHOW1
  213.         RET

  214. ;圖像
  215. PIC:
  216. DB 2EH ,4AH ,4AH ,32H ,00H ,00H ,00H ,00H;"5",0
  217. DB 00H ,42H ,7EH ,40H ,00H ,00H ,00H ,00H;"1",1
  218. DB 42H ,7EH ,10H ,52H ,7EH ,42H ,00H ,00H;"H",2
  219. DB 42H ,7EH ,52H ,52H ,46H ,20H ,00H ,00H;"E",3
  220. DB 42H ,7EH ,42H ,00H ,00H ,00H ,00H ,00H;"I",4
  221. DB 00H ,40H ,00H ,00H ,00H ,00H ,00H ,00H;".",5
  222. DB 18H ,24H ,42H ,42H ,24H ,00H ,00H ,00H;"C",6
  223. DB 18H ,24H ,42H ,42H ,24H ,18H ,00H ,00H;"O",7
  224. DB 42H ,7EH ,0CH ,70H ,10H ,4CH ,7EH ,42H;"M",8

  225. END
復制代碼
實物測試的時候發現了一些顯示的bug,所以又更新了一下這個帖子,
歡迎批評指正。

屏幕截圖 2024-04-07 205412.png (93.95 KB, 下載次數: 52)

仿真圖

仿真圖

屏幕截圖 2024-04-07 205412.png (112.47 KB, 下載次數: 64)

文件

文件

092613eedd06c70deb2ec666cf2e2da6145707726.jpg (2.51 MB, 下載次數: 52)

實物測試

實物測試

ASM_OLED.rar

1.98 MB, 下載次數: 21, 下載積分: 黑幣 -5

相關文件

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:126422 發表于 2024-4-8 12:19 | 只看該作者
請教樓主,C語言怎么轉成匯編語言的,謝謝。
回復

使用道具 舉報

板凳
ID:1114132 發表于 2024-4-8 12:28 | 只看該作者
lijn 發表于 2024-4-8 12:19
請教樓主,C語言怎么轉成匯編語言的,謝謝。

我是直接看著c寫的匯編,直接抄c語言的邏輯。keil debug 也可以直接看c程序生成的匯編
回復

使用道具 舉報

地板
ID:311731 發表于 2024-4-8 15:29 | 只看該作者
樓主匯編基礎扎實,佩服
回復

使用道具 舉報

5#
ID:1114132 發表于 2024-4-8 20:07 | 只看該作者
zkn866 發表于 2024-4-8 15:29
樓主匯編基礎扎實,佩服

也不是了,還是剛入門的小白,寫代碼還要經常看書。
回復

使用道具 舉報

6#
ID:1114132 發表于 2024-4-9 13:07 | 只看該作者
203行開始的代碼還能優化一下。
原來:
  1.         MOV A,R1
  2.         ANL A,#0F0H
  3.         SETB C
  4.         RRC A
  5.         RRC A
  6.         RRC A
  7.         RRC A
復制代碼

優化后:
  1.         MOV A,R1
  2.         ANL A,#0F0H
  3.         SWAP A
  4.         ADD A,#10H
復制代碼
回復

使用道具 舉報

7#
ID:1001436 發表于 2024-4-9 16:09 | 只看該作者
lijn 發表于 2024-4-8 12:19
請教樓主,C語言怎么轉成匯編語言的,謝謝。

命令行轉換比較方便:
C51.exe oled.c SRC
回復

使用道具 舉報

8#
ID:126422 發表于 2024-11-2 11:27 | 只看該作者
21cnsound 發表于 2024-4-9 16:09
命令行轉換比較方便:
C51.exe oled.c SRC

具體講講怎么設置,可以實現,謝謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜免费视频 | 综合久久99 | 国产一区欧美 | 91精品久久久久久久 | 夜夜操av | 亚洲精品国产精品国自产在线 | 国产精品视频一二三区 | 一区二区三区欧美 | 日韩 欧美 二区 | 国产 欧美 日韩 一区 | 亚洲精品一区国语对白 | 成人精品国产一区二区4080 | 欧美一区二区三区大片 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 欧美久久久网站 | 亚洲精品视频在线播放 | 91精品一区二区三区久久久久 | 羞羞视频免费在线观看 | 97久久久 | 成人国产a | 99色综合| 日韩欧美国产成人一区二区 | www.中文字幕.com| 中文字幕 欧美 日韩 | 欧美一级小视频 | 免费视频中文字幕 | 亚洲精品在线国产 | 黄色av网站免费看 | 国产激情在线播放 | 亚洲 自拍 另类 欧美 丝袜 | 久久久久一区二区三区 | 九九色综合 | 国产视频福利在线观看 | 粉嫩一区二区三区性色av | 欧美一区二区在线 | 精品久久香蕉国产线看观看亚洲 | 色久在线 | 天天操 天天操 | 国产露脸国语对白在线 | 日韩视频在线播放 | 激情的网站 |