#include "reg52.h" #include <intrins.h>
#define uchar unsigned char
typedef bit BOOL ;
sbit rs = P2^6 ; sbit rw = P3^6 ; sbit ep = P2^7 ;
void delay(uchar) ; void lcd_wcmd(uchar) ; BOOL lcd_bz() ; void lcd_pos(uchar) ; void lcd_wdat(uchar) ; void display(uchar,uchar *) ;
code uchar dis1[] = {" good studay"}; code uchar dis2[] = {"day day up"} ;
void longdelay(uchar s) //长延时 { while(s--) { delay(60) ; } }
void delay(uchar ms) { // 延时子程序 uchar i ; while(ms--) { for(i = 0 ; i<250;i++) ; } }
BOOL lcd_bz() { // 测试LCD忙碌状态 BOOL result ; rs = 0 ; rw = 1 ; ep = 1 ; result = (BOOL)(P0 & 0x80) ; ep = 0 ; return result ; }
void lcd_wcmd(uchar cmd) { // 写入指令数据到LCD while(lcd_bz()) ; rs = 0 ; rw = 0 ; ep = 0 ; P0 = cmd ; ep = 1 ; ep = 0 ; }
void lcd_pos(uchar pos) { //设定显示位置 lcd_wcmd(pos | 0x80) ; }
void lcd_wdat(uchar dat) { //写入字符显示数据到LCD while(lcd_bz()) ; rs = 1 ; rw = 0 ; ep = 0 ; P0 = dat ; ep = 1 ; ep = 0 ; }
void lcd_init() { //LCD初始化设定 lcd_wcmd(0x38) ; //function set delay(1) ; lcd_wcmd(0x38) ; //function set delay(1) ; lcd_wcmd(0x08) ; //display on/off delay(1) ; lcd_wcmd(0x01) ; //清除LCD的显示内容 delay(1) ; lcd_wcmd(0x06) ; //entry mode set delay(1) ; lcd_wcmd(0x0c) ; //entry mode set delay(1) ; }
/*--------------- 函数名称:display() 功能 :在LCD上显示数组的数据 说明 :先写显示地址,后写显示数据 调用 :lcd_wcmd(), lcd_pos() 入口参数:pos 写入的位置,q指向要写入的数据所在的数组 返回值 :无 ----------------*/ void display(uchar pos, uchar *q) { uchar i ; //lcd_wcmd(0x01) ; //clear delay(10) ; lcd_pos(pos) ; for(i=0 ;i<16;i++) { lcd_wdat(*q) ; q++ ; longdelay(2) ; } }
main() { lcd_init() ; // 初始化LCD delay(10) ; display(0x00,dis1) ; display(0x40,dis2) ; display(0x14,dis1) ; display(0x54,dis2) ; lcd_wcmd(0x07) ; //entry mode set delay(1) ; while(1) { display(0x00,dis1) ; /* display(0x40,dis2) ; display(0x14,dis1) ; display(0x54,dis2) ; */ } }
|