📄 lcm._c
字号:
//lcm.c
//液晶显示程序
#include<iom8v.h>
void delay_1us(void)//1us延时程序
{
unsigned int k;
for(k=1;k<10;k++)
;
}
void delay_1ms(void)//1ms延时程序
{
unsigned int k;
for(k=1;k<856;k++)
;
}
void delay(unsigned int m)//延时m ms程序
{
unsigned int l;
for(l=0;l<m;l++)
delay_1ms();
}
void data_0(unsigned int n)//传输N个0
{ int i;
for(i=0;i<n;i++)
{
PORTD&=0x7F; delay_1us();//data=0
PORTD&=0xBF;delay_1us();//wr=0
PORTD|=0x40; delay_1us();//wr=1
}
}
void data_1(unsigned int n)//传输N个1
{ int i;
for(i=0;i<n;i++)
{
PORTD&=0x7f;
PORTD|=0x80;delay_1us();//data=1
PORTD&=0xBF;delay_1us();//wr=0
PORTD|=0x40;delay_1us();//wr=1
}
}
void write_lcd(char n,unsigned char data )
{
char j;
unsigned char dat=data;
DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
PORTD=0xff; delay_1us();
switch(n)
{
case 12://写命令
{
PORTD&=0xef;delay_1us();
data_1(1);
data_0(2);
for(j=0;j<8;j++)
{
PORTD&=0x7f; delay_1us();
PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
PORTD&=0xbf;delay_1us();
PORTD|=0x40;delay_1us();
dat=(dat<<1);delay_1us();
}
data_0(1);
PORTD|=0x10;delay_1us();
PORTD|=0xc0;delay_1us();
//delay(100);
}break;
case 13://写最低位数据
{
PORTD&=0xef;delay_1us();
data_1(1);
data_0(1);
data_1(2);
data_0(1);
for(j=0;j<8;j++)
{
PORTD&=0x7f; delay_1us();
PORTD|=(dat&0x80);delay_1us();
PORTD&=0xbf; delay_1us();
PORTD|=0x40; delay_1us();
dat=(dat<<1); delay_1us();
}
PORTD|=0x10;delay_1us();
PORTD|=0xc0;delay_1us();
//return(read_lcd()==)
}break;
case 10://将高七位全部置零
{
dat=(dat<<3);
PORTD&=0xef;delay_1us();
data_1(1);
data_0(1);
data_1(2);
for(j=0;j<5;j++)
{
PORTD&=0x7f; delay_1us();
PORTD|=(dat&0x80);delay_1us();
PORTD&=0xbf; delay_1us();
PORTD|=0x40; delay_1us();
dat=(dat<<1); delay_1us();
}
data_0(4);
PORTD|=0x10;delay_1us();
PORTD|=0xc0;delay_1us();
//return(read_lcd()==)
}break;
}
}
void main(void)
{
unsigned char init[4]={0x29,0x18,0x01,0x03}, address[20]={0x06,0x10,0x03,0x1e,0x07,0x1a,
0x06,0x13,0x05,0x1b,0x05,0x1f,
0x07,0x10,0x07,0x1f,0x0b,0x13,
0x07,0x1d};//初始化命令字表和0~9数字表
char i,add;
unsigned int j;
DDRD|=0xf0;delay_1us();
PORTD|=0xf0;delay_1us();
for(i=0;i<10;i++)
for(j=0;j<6000;j++);
for(i=0;i<4;i++)//初始化
write_lcd(12,init[i]);
for(add=2;add<16;add++)//将高七位置零
write_lcd(10,add);
//delay(300);
while(1)
{
for(i=0;i<20;i++) //写一个数据延时一段时间
{
write_lcd(13,address[i++]);
write_lcd(13,address[i]);
delay(200);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -