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

標(biāo)題: OLED IIC四腳0.96寸 51單片機(jī)匯編程序分享 仿真+實(shí)物測(cè)試 [打印本頁(yè)]

作者: SkylarGattino    時(shí)間: 2024-4-6 16:26
標(biāo)題: OLED IIC四腳0.96寸 51單片機(jī)匯編程序分享 仿真+實(shí)物測(cè)試
這學(xué)期學(xué)的51單片機(jī)匯編,清明沒(méi)事寫了個(gè)OLED的程序,歡迎批評(píng)指正。代碼是照著一個(gè)c程序抄的,我會(huì)放到附件里,用到的資料都會(huì)放到附件里,歡迎批評(píng)指正。

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

  3. ORG 00H
  4.         JMP START                ;跳轉(zhuǎn)到主函數(shù)
  5. ORG 100H
  6. START:
  7.         MOV SP,#30H                ;設(shè)置堆棧指針
  8.         ACALL INIT                ;初始化OLED
  9.         
  10. MAIN:
  11.         ;顯示白屏
  12.         MOV A,#0FFH               
  13.         ACALL FILL
  14.         ;設(shè)置字符串顯示
  15.         MOV R1,#10                ;字符串列起始位置,單位:像素
  16.         MOV R0,#2H                ;字符串行起始位置,單位:行(共0-7,8行)
  17.         MOV R2,#72                ;字符串長(zhǎng)度,單位:像素
  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. ;開(kāi)始傳輸
  110. START_TRANS:
  111.         SETB SCL
  112.         SETB SDA
  113.         CLR SDA
  114.         CLR SCL
  115.         RET
  116.         
  117. ;結(jié)束傳輸
  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的數(shù)據(jù)按位傳輸
  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的數(shù)據(jù)作為指令傳出
  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. ;傳輸數(shù)據(jù),將ACC的數(shù)據(jù)作為數(shù)據(jù)傳出
  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的數(shù)據(jù)刷屏,影響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:圖像長(zhǎng)度,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
復(fù)制代碼
實(shí)物測(cè)試的時(shí)候發(fā)現(xiàn)了一些顯示的bug,所以又更新了一下這個(gè)帖子,
歡迎批評(píng)指正。

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

仿真圖

仿真圖

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

文件

文件

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

實(shí)物測(cè)試

實(shí)物測(cè)試

ASM_OLED.rar

1.98 MB, 下載次數(shù): 21, 下載積分: 黑幣 -5

相關(guān)文件


作者: lijn    時(shí)間: 2024-4-8 12:19
請(qǐng)教樓主,C語(yǔ)言怎么轉(zhuǎn)成匯編語(yǔ)言的,謝謝。
作者: SkylarGattino    時(shí)間: 2024-4-8 12:28
lijn 發(fā)表于 2024-4-8 12:19
請(qǐng)教樓主,C語(yǔ)言怎么轉(zhuǎn)成匯編語(yǔ)言的,謝謝。

我是直接看著c寫的匯編,直接抄c語(yǔ)言的邏輯。keil debug 也可以直接看c程序生成的匯編
作者: zkn866    時(shí)間: 2024-4-8 15:29
樓主匯編基礎(chǔ)扎實(shí),佩服
作者: SkylarGattino    時(shí)間: 2024-4-8 20:07
zkn866 發(fā)表于 2024-4-8 15:29
樓主匯編基礎(chǔ)扎實(shí),佩服

也不是了,還是剛?cè)腴T的小白,寫代碼還要經(jīng)常看書。
作者: SkylarGattino    時(shí)間: 2024-4-9 13:07
203行開(kāi)始的代碼還能優(yōu)化一下。
原來(lái):
  1.         MOV A,R1
  2.         ANL A,#0F0H
  3.         SETB C
  4.         RRC A
  5.         RRC A
  6.         RRC A
  7.         RRC A
復(fù)制代碼

優(yōu)化后:
  1.         MOV A,R1
  2.         ANL A,#0F0H
  3.         SWAP A
  4.         ADD A,#10H
復(fù)制代碼

作者: 21cnsound    時(shí)間: 2024-4-9 16:09
lijn 發(fā)表于 2024-4-8 12:19
請(qǐng)教樓主,C語(yǔ)言怎么轉(zhuǎn)成匯編語(yǔ)言的,謝謝。

命令行轉(zhuǎn)換比較方便:
C51.exe oled.c SRC

作者: lijn    時(shí)間: 2024-11-2 11:27
21cnsound 發(fā)表于 2024-4-9 16:09
命令行轉(zhuǎn)換比較方便:
C51.exe oled.c SRC

具體講講怎么設(shè)置,可以實(shí)現(xiàn),謝謝。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲人成免费 | 午夜tv | 天天操夜夜撸 | 中文在线观看视频 | 一级黄视频 | 欧美一区在线视频 | 国产亚洲一区二区三区 | 午夜一级片 | 国产精品一区av | 99视频在线观看免费 | 欧美黄色一级视频 | aaa黄色| 嫩草在线观看 | 日韩欧美黄色 | 日韩视频第一页 | 欧美日韩精品 | 97免费在线 | 天堂网亚洲| 日韩欧美国产成人 | 五月久久 | 欧美午夜精品久久久久免费视 | 日韩亚洲在线 | 成人特级毛片 | 亚洲成人二区 | 亚洲天堂免费 | 国产一区二区三区久久 | 黄色一区二区三区 | 成人高潮片免费网站 | 伊人精品视频 | 免费黄色一级 | 成人午夜激情视频 | 99在线免费观看 | 99热国产在线 | 国产寡妇亲子伦一区二区三区四区 | 天天干天天操天天爽 | 成人在线网 | 激情五月激情综合网 | 蜜臀av性久久久久av蜜臀妖精 | 中文字幕永久 | 丝袜美腿一区二区三区 | 日韩免费在线 |