|
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0
sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_EN=P2^5;
sbit LCD_PSB=P1^2;
sbit wela =P2^6;
sbit dula =P2^7;
void delay_12864(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++) ;
}
void busychk_12864(void)
{
unsigned int timeout = 0;
LCD_EN = 0;
LCD_RS = 0;
LCD_RW= 1;
LCD_EN = 1;
while( 0x80 && ++timeout != 0); //忙狀態檢測,等待超時時間為60ms
LCD_EN = 0;
}
//寫命令子程序
void wrtcom_12864(unsigned char com)
{
busychk_12864();
LCD_EN = 0;
LCD_RS = 0;
LCD_RW = 0;
P0 = com;
LCD_EN = 1;
delay_12864(50); //50us使能延時!!!注意這里,如果是較快的CPU應該延時久一些
LCD_EN = 0;
}
//寫數據子程序
void wrtdat_12864(unsigned char dat)
{
busychk_12864();
LCD_EN= 0;
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
P0 = dat;
delay_12864(50); //使能延時!!!注意這里,如果是較快的CPU應該延時久一些
LCD_EN = 0;
}
void lcd_init()
{
LCD_PSB=1;
wrtcom_12864(0X30);
delay_12864(5);
wrtcom_12864(0X02);
delay_12864(5);
wrtcom_12864(0X0C);
delay_12864(5);
wrtcom_12864(0X01);
delay_12864(5);
wrtcom_12864(0X06);
delay_12864(5);
wrtcom_12864(0X80);
delay_12864(5);
}
void main()
{
uint i;
delay_12864(100); //啟動延時
lcd_init();
wrtcom_12864(0x80);
for(i=0;i<16;i++)
wrtdat_12864(0x00+i);
wrtcom_12864(0x90);
for(i=0;i<16;i++)
wrtdat_12864(0x10+i);
wrtcom_12864(0x88);
for(i=0;i<16;i++)
wrtdat_12864(0x30+i);
wrtcom_12864(0x98);
for(i=0;i<16;i++)
wrtdat_12864(0x40+i);
delay_12864(50);
while( 1 ) ;
}
|
|