📄 lcd.c
字号:
#include <iom128v.h>
#ifndef __lcd_h
#define __lcd_h
#define req asm("sbi 0x03,6")
#define cl_req asm("cbi 0x03,6")
#define dat asm("sbi 0x18,0")
#define cl_dat asm("cbi 0x18,0")
#define cl_reset asm("cbi 0x15,3")
#define set_reset asm("sbi 0x15,3")
#define LCD 0x9000
void delay (unsigned int t)
{
unsigned char i;
for (i=1;i<t;i++);
}
void delay_1ms(void)
{
unsigned int i;
for (i=0;i<2286;i++);
}
void delay_nms(unsigned int n)
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
void lcd_w(unsigned char data)
{
unsigned char *p=(unsigned char *)(LCD);
while((PINE&0x80)!=0x00)
;
dat;
*p=data;
cl_dat;
;;
req;
;;
while((PINE&0x80)==0x00)
;
cl_req;
}
void lcd_init (void)
{
MCUCR=MCUCR|0x80;
DDRB|=0x01;
PORTB&=0xfe;
DDRE=0x40;
PORTE=0xff;
cl_reset;
delay(10);
set_reset;
delay(10);
cl_req;
delay(10);
}
void lcd_clear (void)
{
lcd_w(0xf4);
}
void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
{ unsigned int i;
x+=2;
while (*ch!=0)
{
lcd_w(0xf0);
lcd_w(x);
lcd_w(y);
lcd_w(*ch-0xa0);
ch++;
lcd_w(*ch-0xa0);
ch++;
delay_nms(2);
for(i=0;i<16;i++)
{lcd_w(0xf7);
delay_nms(2);}
}
for(i=0;i<115;i++)
{lcd_w(0xf7);
delay_nms(2);}
}
void lcd_putsm(unsigned char x,unsigned char y,unsigned char *ch)
{ unsigned int i;
x+=4;
while (*ch!=0)
{
lcd_w(0xf1);
lcd_w(x);
lcd_w(y);
lcd_w(*ch);
ch++;
delay_nms(1);
for(i=0;i<8;i++)
{lcd_w(0xf7);
delay_nms(2);}
}
for(i=0;i<118;i++)
{lcd_w(0xf7);
delay_nms(2);}
}
void lcd_putse(unsigned char x,unsigned char y,unsigned char *ch)
{
x+=4;
while (*ch!=0)
{
lcd_w(0xf1);
lcd_w(x);
lcd_w(y);
lcd_w(*ch);
ch++;
if (x>=19)
{
x=4;
y+=8;
}
else
x++;
}
}
void lcd_putsf(unsigned char x,unsigned char y,unsigned char *ch)
{ unsigned int i;
x+=2;
while (*ch!=0)
{
lcd_w(0xf0);
lcd_w(x);
lcd_w(y);
lcd_w(*ch-0xa0);
ch++;
lcd_w(*ch-0xa0);
ch++;
delay_nms(2);
if (x>=0x09)
{
x=2;
y+=1;
}
else
x++;
}
}
#endif
unsigned char a[]={87,101,108,99,111,109,32,116,111,32,66,101,105,106,105,110};
unsigned char b[]={79,110,101,32,87,111,114,108,100,32,79,110,
101,32,68,114,101,97,109,0};
void main(void)
{while(1)
{
int j;
lcd_init();
lcd_clear();
lcd_putsc(7,0,"北京欢迎你"); //右移动
lcd_putsm(55,10,b);
delay_nms(100);
for(j=0;j<2;j++)
{lcd_putsf(1,1,"北京欢迎你"); // 闪烁
delay_nms(20);
lcd_w(0xf4);
delay_nms(20);}
lcd_putsf(1,1,"北京欢迎你"); //静止
lcd_putse(0,35,b);
delay_nms(150);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -