//ST7920 LCD
#include"stm32f10x_conf.h"
#include"stm32f10x.h"
#include"appinclude.h"
static void delay(u16 t)//粗略延时tms
{
u16 i;
while(t--)
{
i=12;//可以自己修改的;
while(i--);
}
}
void SendByte(u8 Dbyte)
{
u8 i;
for(i=0;i<8;i++)
{
// LCD_CLKIO(1);
if(Dbyte&0x80)
LCD_DATAIO(0);//数据线拉高
else LCD_DATAIO(1);
Dbyte=Dbyte<<1; //左移一位
LCD_CLKIO(0); //时钟线拉高
delay(1);
LCD_CLKIO(1); //时钟线拉低
delay(1);
}
}
//u8 ReceiveByte(void)
//{
// u8 i,temp1,temp2;
// temp1 = 0;
// temp2 = 0;
// for(i=0;i<8;i++)
// {
// temp1=temp1<<1;
// LCD_CLKIO(1);
// LCD_CLKIO(0);
// LCD_CLKIO(1);
// if(READ_DATAIO()) temp1++;
// }
// for(i=0;i<8;i++)
// {
// temp2=temp2<<1;
// LCD_CLKIO(1);
// LCD_CLKIO(0);
// LCD_CLKIO(1);
// if(READ_DATAIO()) temp2++;
// }
// return ((0xf0&temp1)+(0x0f&temp2));
//}
//void CheckBusy( void )
//{
// // do SendByte(0xfc); //11111,RW(1),RS(0),0
// // while(0x80&ReceiveByte()); //BF(.7)=1 Busy
//}
void Lcd_WriteCmd(u8 Cbyte )
{
LCD_CS(0); //片选线拉高
// CheckBusy();
delay(10);
SendByte(0xf8); //11111,RW(0),RS(0),0
delay(100);
SendByte(0xf0&Cbyte); //高四位
delay(100);
SendByte(0xf0&(Cbyte<<4)); //低四位(先执行<<)
delay(100);
LCD_CS(1);
}
void Lcd_WriteData(u8 Dbyte )
{
LCD_CS(0);
// CheckBusy();
delay(10);
SendByte(0xfa); //11111,RW(0),RS(1),0
delay(100);
SendByte(0xf0&Dbyte); //高四位
delay(100);
SendByte(0xf0&(Dbyte<<4)); //低四位(先执行<<)
delay(100);
LCD_CS(1);
}
void Lcd_Init(void)
{
Lcd_WriteCmd(0x30); //选择基本指令集 选择8bit数据流
delay(1000);
Lcd_WriteCmd(0x06); // 读写时,地址递增
delay(1000);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delay(1000);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delay(1000);
//Lcd_WriteCmd(0xc0);
//delay(1000);
}
//显示中英文
void str_Disp(u8 x,u8 y,u8 *s) //使用自带的字库
{
Lcd_WriteCmd(0x80+y*16+x); //写地址
delay(1000);
while(*s>0)
{
Lcd_WriteData(*s); //写数据
delay(1000);
s++;
}
}
void cleardisp()
{
Lcd_WriteCmd(0x30); //选择基本指令集 选择8bit数据流
delay(100);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delay(100);
}
刚烧进程序时,运行是正常的,屏点亮,显示字体,但断电再上电之后,屏就不亮了,什么情况呢? |