📄 main.c
字号:
/******************** 2011电子科技协会 ********************
;名称 :1602液晶屏
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 : 利用1602显示”today···,I am very happy,以及电协网站www.gdutelc.cn,welcome to LCD“
;***********************************************************/
#include <stm8s105c_s.h>
#define uchar unsigned char
#define uint unsigned int
uchar table0[]="today...";
uchar table1[]="I am very happy!";
uchar table2[]="www.gdutelc.cn";
uchar table3[]="Welcome to LCD";
_Bool RS @PA_ODR:4;
_Bool RW @PA_ODR:5;
_Bool E @PA_ODR:6;
void write_com(uchar com);
void delay(uint a)
{
uchar i;
for(a;a>0;a--)
for(i=0;i<250;i++);
}
void init_stm8(void)
{
PA_DDR=0x70;
PA_CR1=0x70;
PA_CR2=0x00;
PB_DDR=0xff;
PB_CR1=0xff;
PB_CR2=0x00;
}
void init_1602(void)
{
write_com(0x38); //显示模式设置
write_com(0x0c); //开显示,不显示光标
write_com(0x06); //地址指针自动加一
write_com(0x01); //清屏
write_com(0x80+0x04); //指针指向第一行第四格
RW=0; //因只涉及向1602写数据,不涉及读,写的时候RW引脚都为低电平,故将RW置低
}
//写指令子函数,涉及1602时序,请参考1602资料
void write_com(uchar com)
{
RS=0;
E=0;
PB_ODR=com;
delay(2);
E=1;
E=0;
}
//写数据子函数,写指令和数据区别在RS电平的高低
void write_data(uchar data)
{
RS=1;
E=0;
PB_ODR=data;
delay(2);
E=1;
E=0;
}
//显示子函数
void display(uchar *s)
{
while(*s>0) //在有n个字符的字符组中有n+1字节,最后一字节为0,故这里就是把所有字符显示完后退出显示
{
write_data(*s++); //显示指针×s所指地址的字符
delay(50);
}
}
void main()
{
uchar i;
init_stm8();
while(1)
{
init_1602(); //初始化1602
display(table0); //显示today···
write_com(0x80+0x40); //将地址指针移到第二行
display(table1); //显示table1中的字符
delay(1000); //延时一段时间
write_com(0x01); //清屏
write_com(0x38); //显示模式设置
write_com(0x80+0x10); //地址指针移到第一行第17列中
display(table2);
write_com(0x80+0x40+0x10); //地址指针移到第二行第17列中
display(table3);
for(i=0;i<15;i++) //整屏左移15行
{
write_com(0x18); //整屏向左移
delay(200);
}
delay(2000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -