12864IIC 0.96寸OLED 51单片机汇编程序分享

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这学期学的51单片机汇编,没事写了个OLED的程序,有些是照着一些c的例程写的。会有错误,还请批评指正。仿真


一、代码

SCL BIT P1.0		;引脚定义
SDA BIT P1.1

ORG 00H
	JMP START		;跳转到主函数
ORG 100H
START:
	MOV SP,#30H		;设置堆栈指针
	ACALL INIT		;初始化OLED
	
MAIN:
;	MOV A,#01H
;	ACALL TRANS
;	RL A			;恢复寄存器A的数据
	;显示白屏
	MOV A,#0FFH	
	ACALL FILL
	;设置字符串显示
	MOV R1,#10		;字符串列起始位置,单位:像素
	MOV R0,#2H		;字符串行起始位置,单位:行(共0-78行)
	MOV R2,#48		;字符串长度,单位:像素
	MOV DPTR,#PIC	;传入图像地址
	ACALL SHOW
	MOV R1,#0		;字符串列起始位置,单位:像素
	MOV R0,#3H		;字符串行起始位置,单位:行(共0-78行)
	MOV R2,#48		;字符串长度,单位:像素
	MOV DPTR,#PIC1	;传入图像地址
	ACALL SHOW_CH
	MOV R1,#0		;字符串列起始位置,单位:像素
	MOV R0,#5H		;字符串行起始位置,单位:行(共0-78行)
	MOV R3,#'0'		;要显示的字符
	MOV DPTR,#TAB	;传入图像地址
	ACALL SHOW_CHAR
	;暂停程序
	JMP $

INIT:
	;Write_IIC_Command(0xAE);   //display off
	MOV A,#0AEH
	ACALL TRANS_CMD
	;Write_IIC_Command(0x20);	//Set Memory Addressing Mode	
	MOV A,#20H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x10);	//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
	MOV A,#10H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xb0);	//Set Page Start Address for Page Addressing Mode,0-7
	MOV A,#0B0H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xc8);	//Set COM Output Scan Direction
	MOV A,#0C8H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x00);//---set low column address
	MOV A,#00H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x10);//---set high column address
	MOV A,#10H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x40);//--set start line address
	MOV A,#40H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x81);//--set contrast control register
	MOV A,#81H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xdf);
	MOV A,#0DFH
	ACALL TRANS_CMD
	;Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
	MOV A,#0A1H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xa6);//--set normal display
	MOV A,#0A6H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
	MOV A,#0A8H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x3F);//
	MOV A,#3FH
	ACALL TRANS_CMD
	;Write_IIC_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
	MOV A,#0A4H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xd3);//-set display offset
	MOV A,#0D3H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x00);//-not offset
	MOV A,#00H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
	MOV A,#0D5H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xf0);//--set divide ratio
	MOV A,#0F0H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xd9);//--set pre-charge period
	MOV A,#0D9H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x22); //
	MOV A,#22H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xda);//--set com pins hardware configuration
	MOV A,#0DAH
	ACALL TRANS_CMD
	;Write_IIC_Command(0x12);
	MOV A,#12H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xdb);//--set vcomh
	MOV A,#0DBH
	ACALL TRANS_CMD
	;Write_IIC_Command(0x20);//0x20,0.77xVcc
	MOV A,#20H
	ACALL TRANS_CMD
	;Write_IIC_Command(0x8d);//--set DC-DC enable
	MOV A,#8DH
	ACALL TRANS_CMD
	;Write_IIC_Command(0x14);//
	MOV A,#14H
	ACALL TRANS_CMD
	;Write_IIC_Command(0xaf);//--turn on oled panel 
	MOV A,#0AFH
	ACALL TRANS_CMD
	RET
	
;开始传输
START_TRANS:
	SETB SCL
	SETB SDA
	CLR SDA
	CLR SCL
	RET
	
;结束传输
CLOSE_TRANS:
	CLR SCL
	CLR SDA
	SETB SCL
	SETB SDA
	CLR SDA
	CLR SCL
	RET

;传输,影响R0,ACC寄存器,将ACC的数据按位传输
TRANS:
	MOV R0,#8H
TRA1:
	RLC A
	MOV SDA,C
	SETB SCL
	CLR SCL
	DJNZ R0,TRA1
	SETB SDA
	SETB SCL
	CLR SCL
	RET
	
;传输指令,将ACC的数据作为指令传出
TRANS_CMD:
	PUSH ACC
	ACALL START_TRANS
	MOV A,#78H
	ACALL TRANS
	MOV A,#00H
	ACALL TRANS
	POP ACC
	ACALL TRANS
	ACALL CLOSE_TRANS
	RET
	
;传输数据,将ACC的数据作为数据传出
TRANS_DATA:
	PUSH ACC
	ACALL START_TRANS
	MOV A,#78H
	ACALL TRANS
	MOV A,#40H
	ACALL TRANS
	POP ACC
	ACALL TRANS
	ACALL CLOSE_TRANS
	RET
	
;将ACC的数据刷屏,影响ACC,R0,R1,R2寄存器
FILL:
	PUSH ACC
	MOV A,#8H
FILL1:
	MOV R0,#0B0H
	DEC A
	MOV R2,A
	ADD A,R0
	ACALL TRANS_CMD
	MOV A,#0H
	ACALL TRANS_CMD
	MOV A,#10H
	ACALL TRANS_CMD
	MOV R1,#128
FILL2:
	POP ACC
	PUSH ACC
	ACALL TRANS_DATA
	DJNZ R1,FILL2
	MOV A,R2
	JNZ FILL1
	DEC SP
	RET

;将指定的图像显示到指定位置,R0:指定行,R1:指定列,R2:图像长度,DPTR:图像位置
SHOW:
	DEC R0
	MOV A,#0B0H
	ADD A,R0
	ACALL TRANS_CMD
	MOV A,R1
	ANL A,#0FH
	ACALL TRANS_CMD
	MOV A,R1
	ANL A,#0F0H
	SWAP A
	ADD A,#10H
	ACALL TRANS_CMD
SHOW1:
	CLR A
	MOVC A,@A+DPTR
	ACALL TRANS_DATA
	INC DPTR
	DJNZ R2,SHOW1
	RET
	
;将指定的字符显示到指定位置,R0:指定行,R1:指定列,R2:图像长度,R3:字符,DPTR:字表起始位置
SHOW_CHAR:
	DEC R0
	MOV A,#0B0H
	ADD A,R0
	ACALL TRANS_CMD
	MOV A,R1
	ANL A,#0FH
	ACALL TRANS_CMD
	MOV A,R1
	ANL A,#0F0H
	SWAP A
	ADD A,#10H
	ACALL TRANS_CMD
	MOV A,R3
	SUBB A,#48
	JZ SHOW_CHAR3
	MOV R3,A
SHOW_CHAR1:
	MOV A,DPL
	ADDC A,#8
	MOV DPL,A
	JNC SHOW_CHAR2
	INC DPH
SHOW_CHAR2:
	DJNZ R3,SHOW_CHAR1
SHOW_CHAR3:
	MOV R2,#8
SHOW_CHAR4:
	CLR A
	MOVC A,@A+DPTR
	ACALL TRANS_DATA
	INC DPTR
	DJNZ R2,SHOW_CHAR4
	RET
	
;将指定的中文显示到指定位置R0:指定行,R1:指定列,R2:字符长度,DPTR:字表起始位置
SHOW_CH:
	MOV A,R0
	PUSH ACC
	MOV A,R1
	PUSH ACC
	MOV A,R2
	PUSH ACC
	ACALL SHOW
	POP ACC
	MOV R2,A
	POP ACC
	MOV R1,A
	POP ACC
	MOV R0,A
	INC R0
	ACALL SHOW
	RET
;图像
PIC:
DB 00H,00H,4CH,92H,92H,64H,00H,00H;"S",0
DB 00H,00H,0FEH,10H,28H,0C6H,00H,00H;"K",1
DB 00H,06H,08H,0F0H,08H,06H,00H,00H;"Y",2
DB 00H,00H,0FEH,80H,80H,80H,00H,00H;"L",3
DB 00H,00H,0FCH,22H,22H,0FCH,00H,00H;"A",4
DB 00H,00H,0FEH,32H,52H,8CH,00H,00H;"R",5
PIC1:
;上半部分
DB 00H,00H,0F8H,49H,4AH,4CH,48H,0F8H,48H,4CH,4AH,49H,0F8H,00H,00H,00H;"单",0
DB 00H,00H,00H,0FEH,20H,20H,20H,20H,20H,3FH,20H,20H,20H,20H,00H,00H;"片",1
DB 10H,10H,0D0H,0FFH,90H,10H,00H,0FEH,02H,02H,02H,0FEH,00H,00H,00H,00H;"机",2
;下半部分
DB 10H,10H,13H,12H,12H,12H,12H,0FFH,12H,12H,12H,12H,13H,10H,10H,00H;"单",0
DB 00H,80H,60H,1FH,02H,02H,02H,02H,02H,02H,0FEH,00H,00H,00H,00H,00H;"片",1
DB 04H,03H,00H,0FFH,00H,83H,60H,1FH,00H,00H,00H,3FH,40H,40H,78H,00H;"机",2
TAB:
DB 00H,00H,7CH,82H,82H,7CH,00H,00H;"0",0
DB 00H,00H,84H,0FEH,80H,00H,00H,00H;"1",1
DB 00H,00H,0C4H,0A2H,92H,8CH,00H,00H;"2",2
DB 00H,00H,44H,92H,92H,6CH,00H,00H;"3",3
DB 00H,00H,70H,4CH,0FEH,40H,00H,00H;"4",4
DB 00H,00H,9EH,92H,92H,62H,00H,00H;"5",5
DB 00H,00H,7CH,92H,92H,64H,00H,00H;"6",6
DB 00H,00H,06H,0E2H,12H,0EH,00H,00H;"7",7
DB 00H,00H,6CH,92H,92H,6CH,00H,00H;"8",8
DB 00H,00H,4CH,92H,92H,7CH,00H,00H;"9",9
	
END

二、取字模

用的是pctolcd2002,配置如下:在这里插入图片描述
生成出来还要改下格式。在这里插入图片描述
汉字为16x16,需要分为上半部分和下半部分。

三、相关文件获取

在这里插入图片描述
没发过文章,不知道怎么上传附件,所以放到资源绑定里了(应该一样吧?)。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 06:00:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 06:00:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 06:00:04       87 阅读
  4. Python语言-面向对象

    2024-05-10 06:00:04       96 阅读

热门阅读

  1. 代码随想录算法训练营第四十四天

    2024-05-10 06:00:04       36 阅读
  2. GIS找工作:天津测绘院24届春招Offer面经

    2024-05-10 06:00:04       38 阅读
  3. Vue 生命周期

    2024-05-10 06:00:04       32 阅读
  4. Android手机应用开发工程师应届生学习大纲

    2024-05-10 06:00:04       29 阅读
  5. 学习记录之数学表达式(4)

    2024-05-10 06:00:04       28 阅读
  6. 文件上传结合springboot

    2024-05-10 06:00:04       36 阅读
  7. 石家庄河北银行的

    2024-05-10 06:00:04       29 阅读
  8. golang学习

    2024-05-10 06:00:04       32 阅读
  9. 有关while((c=getchar())!=\n)和while((ch=getchar()!=EOF))

    2024-05-10 06:00:04       28 阅读