📄 lcd.c
字号:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
char character1[]="****************";
char character2[]="智能电力管理系统";
char character3[]=" 版本号:01 ";
char character4[]="北化航天工业学院";
char character5[]="**系统starting**";
char character6[]="初始化GSM.......";
char character7[]="初始化TIME......";
char character8[]="初始化DS18B20...";
char character9[]="**发送短信......";
char character10[]="**发送完成......";
char character11[]="初始化GSM 完成..";
char character12[]="初始化TIME完成..";
const char ssb[] PROGMEM="北华航天工业学院";
const char ssa[] PROGMEM="----光芒电子----";
const char ssd[] PROGMEM="智能油箱控制系统";
const char sse[] PROGMEM="**版本号 V0.11**";
#define SET_SCK PORTC|=0x04;//串行时钟线
#define CLR_SCK PORTC&=0xfb;
#define SET_SID PORTC|=0x02;//串行数据线
#define CLR_SID PORTC&=0xfd;
#define SET_CS PORTC|=0x01; //片选
#define CLR_CS PORTC&=0xfe;
const unsigned char adress_table[] PROGMEM=
{
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,//第三行汉字位置
0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,//第四行汉字位置
};
/************************写入字节函数(内部)********************/
void delay(unsigned int);
void write_byte(unsigned char Data) //单纯写字节,8位字节SID为数据 SCLK为时钟
{
unsigned char i,Temp_data;
for(i=0;i<8;i++)
{
Temp_data=Data;
Temp_data<<=i;
if(Temp_data&0x80) {SET_SID;}
else {CLR_SID;}
delay(50);
SET_SCK;
delay(50);
CLR_SCK;
}
}
/************************延时函数**************************/
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
/************************命令写入函数***************************/
void write_command(unsigned char command) //写命令
{
SET_CS;
write_byte(0xF8); //发送S_ID
write_byte(command&0xF0); //发送H_data
write_byte((command&0x0F)<<4); //发送L_data
CLR_CS;
}
/************************数据写入函数***************************/
void write_data(unsigned char Data) //写数据
{
SET_CS;
write_byte(0xFA); //发送S_ID
write_byte(Data&0xF0); //发送H_data
write_byte((Data&0x0F)<<4); //发送L_data
CLR_CS;
}
/************************LCD初始化函数***************************/
void LCD_Init(void) //LCD初始化
{
DDRC|=0X07;
delay(200);
write_command(0x30); //功能设置 8位数据,基本指令集
delay(10);
write_command(0x0C); //显示状态 ON,游标OFF,反白OFF
delay(10);
write_command(0x01); //清除显示
delay(500);
write_command(0x02); //地址归位
write_command(0x80); //设置DDRAM地址
write_command(0x01); //清除显示
}
/************************字符串打印函数***************************/
void display_str(unsigned char row,unsigned char column,unsigned char *p)
{
write_command(0x30);
//write_command(adress_table[row*8+column]);
write_command(pgm_read_byte(adress_table+row*8+column));
while((*p)!='\0')
{write_data(*p++);
column++;
}
}
void display_1str(unsigned char row,unsigned char column,unsigned char p)
{
write_command(0x30);
write_command(pgm_read_byte(adress_table+row*8+column));
write_data(p/10);
write_data(p%10);
write_data('%');
}
void display_str2(unsigned char row,unsigned char column,char *p)
{
unsigned char j,i=0;
j=1;
write_command(0x30);
//write_command(adress_table[row*8+column]);
write_command(pgm_read_byte(adress_table+row*8+column));
while((j)!='\0')
{j=pgm_read_byte(p+i);
write_data(j);
i++;
}
}
void setpic(void)
{
unsigned char i,j;
LCD_Init();
write_command(0x34);
write_command(0x3c);// RE=1 扩展指令选择 G=1 开图形显示
for(j=0;j<16;j++)
for(i=0;i<32;i++)
{
write_command(0x80+i);
write_command(0x80+j);
write_data(0x00);
write_data(0x00);
}
write_command(0x3e);
}
/************************开文本函数***************************/
void settxt(void)
{
write_command(0x30); //功能设置 8位数据,基本指令集
}
void hello(void)
{
display_str(0,0,character1);
}
/************************绘图函数***************************/
/*void draw_pic(unchar x,unchar y,unchar *Draw)
{
unchar i, j, temp_x, temp_y; //
write_command(0x34);
temp_x=x;
temp_y=y;
temp_x |= 0x80; //
temp_y |= 0x80; //
for(i=0;i<32;i++ ) //上半屏32行
{
write_command(temp_y++); //设置绘图区的Y地址坐标0
write_command(temp_x); //设置绘图区的X地址坐标0
for(j=0;j<16;j++) //
{
write_data(*Draw++); //
}
}
temp_x = 0x88; //
temp_y = 0x80; //
j = 0; //
for(;i<64;i++ ) //下半屏32行
{
write_command(temp_y++); //设置绘图区的Y地址坐标0
write_command(temp_x); //设置绘图区的X地址坐标0
for(j=0;j<16;j++) //
{
write_data(*Draw++); //
}
}
write_command(0x36); //绘图ON,基本指令集里面36H不能开绘图
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -