📄 lcd.c
字号:
//LCD.c : source file for the LCD project
//
#include "LCD.h"
#include <delay.h>
#include <eeprom.h>
#include <pgmspace.h>
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////////////////////////////////////
//LCD
uchar xdsd,jdsd;
uchar flg;
char meumy[4][17];//显示缓冲区
char *line[4]; //保存菜单的显示数据
static void io_init(void)
{
//{{WIZARD_MAP(General)
//}}WIZARD_MAP(General)
//{{WIZARD_MAP(I/O Ports)
// PortA
PORTA = 0x0;
DDRA = 0xff;
// PortB
PORTB = 0x0;
DDRB = 0x0;
// PortC
PORTC = 0x0;
DDRC = 0xff;
// PortD
PORTD = 0x0;
DDRD = 0xff;
//}}WIZARD_MAP(I/O Ports)
//{{WIZARD_MAP(Watchdog)
// Watchdog Disabled
wdt_disable();
//}}WIZARD_MAP(Watchdog)
//{{WIZARD_MAP(Analog Comparator)
// Analog Comparator Disabled
ACSR = 0x80;
//}}WIZARD_MAP(Analog Comparator)
}
int main(void)
{
//{{WIZARD_MAP(Initialization)
io_init();
lcm_init();
xdsd=100;
jdsd=50;
//}}WIZARD_MAP(Initialization)
// TODO: Add extra initialization here
//{{WIZARD_MAP(Global interrupt)
//}}WIZARD_MAP(Global interrupt)
while(1)
{
// TODO: Add your code here
flg=0;star1();
delay(500,8000);
flg=1;star1();
delay(500,8000);
}
}
/*****************************************
液晶初始化程序
输入数据:无
输出:PA4:CLK,33-6; PC7:SID,26-5; PC6:CS,25-4;
*****************************************/
void lcm_init(void)
{
sbi(PORTC,6);delay(40,8000);
wr_com(0x30);delay(1,8000); //00110000
wr_com(0x30);delay(1,8000); //00110000
wr_com(0x0c);delay(1,8000); //00001100
wr_com(0x01);delay(5,8000); //00000001
wr_com(0x06);delay(1,8000); //01100000
wr_com(0x01);delay(5,8000); //00000001
}
/*****************************************
液晶写控制字程序
输入数据:要写入的8位数据
输出:无
*****************************************/
void wr_com(uchar a)
{
uchar s;
s=a&0xf0;
lcm_out(0xf8);lcm_out(s);
s=a&0x0f;s<<=4;
lcm_out(s);
}
/*****************************************
液晶写数据子程序
输入数据:要写入的8位数据
*****************************************/
void wr_date(uchar a)
{
uchar s;
s=a&0xf0;
lcm_out(0xfa);lcm_out(s); //11111010
s=a&0x0f;s<<=4;
lcm_out(s);
}
/*****************************************
液晶发送子程序(串行)
输入数据:要发送的8位数据
输出:PA4:CLK,33-6; PC7:SID,26-5; PC6:CS,25-4;
*****************************************/
void lcm_out(char a)
{
char i,d;
for(i=0;i<8;i++)
{
cbi(PORTA,4);
d=a&0x80;
if(d)
sbi(PORTC,7);
else
cbi(PORTC,7);
a<<=1;
sbi(PORTA,4);
}
}
void send_lcm(void)
{
uchar adr[4]={0x80,0x90,0x88,0x98};//各行显示的起始地址
uchar d,d2;
uchar *p;//指向数组的指针
p=meumy[0];
for(d=0;d<4;d++)
{
p=meumy[d]; //指向各行
wr_com(adr[d]); //写入地址
for(d2=0;d2<16;d2++)
{
if(*p==0)*p=' ';
wr_date(*p); //写该行的数据
p++; //指针移动
}
}
}
void clr_arry(void)
{
uchar a,b;
for (a=0;a<4;a++)
for (b=0;b<17;b++)
meumy[a][b]=' ';
}
void lcd_copy(void)
{
clr_arry();
uchar *p;
p=meumy[0]; strcpy_P(p,line[0]); //复制程序空间源字符串到内存空间目标字符串,
p=meumy[1]; strcpy_P(p,line[1]);
p=meumy[2]; strcpy_P(p,line[2]);
p=meumy[3]; strcpy_P(p,line[3]);
}
void star1(void)
{
line[0]=PSTR("广西大学:xxxm/s"); //把字符串放入程序空间并返回其地址
line[1]=PSTR("电气工程:xxxm/s");
line[2]=PSTR("A:20 B: C: ");
line[3]=PSTR("");
lcd_copy();
meumy[0][9]=(xdsd/100)%10+0x30;
meumy[0][10]=(xdsd/10)%10+0x30;
meumy[0][11]=(xdsd/1)%10+0x30;
meumy[1][9]=(jdsd/100)%10+0x30;
meumy[1][10]=(jdsd/10)%10+0x30;
meumy[1][11]=(jdsd/1)%10+0x30;
if(flg)
{
meumy[2][0]=' ';
meumy[2][1]=' ';
meumy[2][2]=' ';
meumy[2][3]=' ';
}
send_lcm();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -