内容发布更新时间 : 2024/11/16 6:32:54星期一 下面是文章的全部内容请认真阅读。
1602 自定义字符显示摄氏度符号
LCD1602 的数据写入及 CGRAM 的使用 1.当使能端 E 由 1 变为 0 时,执 行写指令,数据被写入。例如,欲写入数据 i 到 DDRAM:void WDR(uchar i){ CheckBusy();//检忙
LCD_RS=1;
LCD_RW=0; Delay();
LCD_EN=0; LCD_EN=1;
Delay(); Delay();
LCD_DATA=i;//数据输出到定义端口
LCD_EN=0;//这一步才开始写入到 LCD Delay();}2.CGRAM1602 能存储 8 个自 定义字符,这 8 个自定义字符存储空间的首地址分别是:
0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。以 0x40 来说,它的存储空间如 图所示:如果使用 5*7 字符的话,那么最左 3 位和最后一行的数据实际上是没 用的,通常置 0。如果要自定义一个℃符号,那么先填框,如图(红 1 白 0): 这样我们就得到每个地址需要写入的数据:地址:数据
0x40:0x160x41:0x090x42:0x08 其他类推。将这 8 个数据写入到对应地址即可。 使用时,先确定显示的位置,例如 0X80,然后向 DDRAM 写入自定义字符的 使用代码。0X40-0X78 对应为 0X00-0X07。本例中,先写入指令寄存器 0X80 确定显示位置为第一行第一个,然后写入数据寄存器 0X00,这样就会在第一 行第一个位置显示出℃符号。以下是源程序如果网页格式导致部分字符丢失请 下载 c 程序源文件:51hei/f/avr1602c.rar#include #include #define u8 uchar unsigned char#define u16 uchar unsigned int#define uchar unsigned char#define uint
unsigned intuchar zi[]={0x16,0x09,0x08,0x08,0x08,0x09,0x06,0x00}; //自定义字符 摄氏度#include”1602.h”#include”18b20.h”void
port_init(){
PORTA=0xff;
DDRA=0xff; PORTB=0xff; DDRB=0xff; PORTC=0xff; DDRC=0xff; PORTD=0xff; DDRD=0x00;}void setzi() //把设定字存入 CGRAM{ uchar i; writecmd(0x40); //设 置第一个字的起始地址 for(i=0;i<8;i++) { writedata(zi[i]); }}void show_temp(uint
k){ displayonechar(1,1,(k/100)+48); displayonechar(2,1,(k0/10)+48);
displayonechar(3,1,.); displayonechar(4,1,(k)+48);}void main(){uint TT; //显示 的温度值 port_init();delay(1000);init1602();displaychar(0,0,”Set zi Test”);setzi(); displayonechar(5,1,0x00); //0x00 表示 0x40 地址的值 while(1){TT=read_temper(); show_temp(TT);}}//---------------1602.h----------------#define
RS
PORTB_Bit0#define RW PORTB_Bit1#define EN PORTB_Bit2#define DATA PORTA#define
busy
0x80void
delay(uint
k){uint
i,j;for(i=0;i __no_operation(); __no_operation(); EN=1; __no_operation(); __no_operation(); DDRA=0x00; val=PINA; while(val&busy) { val=PINA; } EN=0; DDRA=0xff;}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!