#include"stm8s.h"
#define uchar unsigned char
#define RS GPIOC,GPIO_PIN_1
#define RW GPIOC,GPIO_PIN_2
#define E GPIOC,GPIO_PIN_3
#define RSTE GPIOC,GPIO_PIN_5
#define LCD_Date_PORT GPIOD
#define u32 unsigned long
#define u8 unsigned long
#define RS_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_1);
#define RS_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_1);
#define RW_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_2);
#define RW_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_2);
#define E_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_3);
#define E_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_3);
#define RSTE_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_5);
#define RSTE_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_5);
#define LCD_DATE_port(dat) GPIO_Write(GPIOD, dat);
#define BUSY() GPIO_ReadInputPin(GPIOD, GPIO_PIN_7);
void GPIO_configuration()
{
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOD,GPIO_PIN_ALL, GPIO_MODE_OUT_PP_HIGH_FAST);
}
//延时函数
void delay(u8 xx)
{
while(xx--);
}
//读忙程序
void rdby(void)
{
unsigned char read;
GPIO_configuration();
while(1)
{
RS_LOW();
RW_HIGH();
E_LOW();
LCD_DATE_port(0xff);
E_HIGH();
GPIO_Init(GPIOD, GPIO_PIN_ALL, GPIO_MODE_IN_FL_NO_IT);
read=GPIO_ReadInputData(GPIOD);
if((read&(GPIO_ReadInputPin(GPIOD, GPIO_PIN_7)))==0)
break;
}
}
//xie shu ju
void wr_data(uchar data)
{
GPIO_configuration();
rdby();
RS_HIGH();
RW_LOW();
E_HIGH();
LCD_DATE_port(data);
E_LOW();
}
//xie ming ling
void wr_cmd(uchar cmd)
{
GPIO_configuration();
rdby();
RS_LOW();
RW_LOW();
E_HIGH();
LCD_DATE_port(cmd);
E_LOW();
}
//hang lie que ding
void display(uchar x,uchar y,uchar *seg)
{
uchar i;
switch(x)
{
case 1:i=0x80;break;
case 2:i=0x90;break;
case 3:i=0x88;break;
case 4:i=0x98;break;
default :break;
}
i=i+y-1;
wr_cmd(i);
while(*seg>0)
{
wr_data(*seg);
seg++;
}
}
//lcd chu shi hua
void lcd_int()
{
delay(5000);
RSTE_HIGH();
RSTE_LOW();
RSTE_HIGH();
wr_cmd(0x30);
delay(500);
wr_cmd(0x30);
delay(500);
wr_cmd(0x0e);
delay(500);
wr_cmd(0x01);
delay(500);
delay(500);
wr_cmd(0x06);
delay(500);
}
void main()
{
lcd_int();
while(1)
{
display(1,2,"nihao");
}
}
此帖出自
小平头技术问答
一周热门 更多>