?? 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 + -