新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 1602自定义字符显示摄氏度符号

1602自定义字符显示摄氏度符号

作者: 时间:2016-11-30 来源:网络 收藏
LCD1602的数据写入及CGRAM的使用
1.当使能端E由1变为0时,执行写指令,数据被写入。
例如,欲写入数据i到DDRAM:
void WDR(uchar i)
{
CheckBusy();//检忙
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
Delay();
LCD_DATA=i;//数据输出到定义端口
Delay();
LCD_EN=1;
Delay();
LCD_EN=0;//这一步才开始写入到LCD
Delay();
}
2.CGRAM
1602能存储8个自定义字符,这8个自定义字符存储空间的首地址分别是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。
以0x40来说,它的存储空间如图所示:

如果使用5*7字符的话,那么最左3位和最后一行的数据实际上是没用的,通常置0。如果要自定义一个℃符号,那么先填框,如图(红1白0):
这样我们就得到每个地址需要写入的数据:
地址:数据
0x40:0x16
0x41:0x09
0x42:0x08
其他类推。将这8个数据写入到对应地址即可。
使用时,先确定显示的位置,例如0X80,然后向DDRAM写入自定义字符的使用代码。0X40-0X78对应为0X00-0X07。
本例中,先写入指令寄存器0X80确定显示位置为第一行第一个,然后写入数据寄存器0X00,这样就会在第一行第一个位置显示出℃符号。


以下是源程序如果网页格式导致部分字符丢失请下载c程序源文件:http://www.51hei.com/f/avr1602c.rar
#include
#include
#define u8 uchar unsigned char
#define u16 uchar unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar 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,(k%100/10)+48);
displayonechar(3,1,.);
displayonechar(4,1,(k%10)+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 0x80
void delay(uint k)
{
uint i,j;
for(i=0;ifor(j=0;j<1140;j++);

}

void wait()
{
uchar val;
DATA=0xff;
RS=0;
RW=1;
__no_operation();
__no_operation();
EN=1;
__no_operation();
__no_operation();
DDRA=0x00;
val=PINA;
while(val&busy)
{
val=PINA;
}
EN=0;
DDRA=0xff;
}

上一页 1 2 下一页

评论


技术专区

关闭