| /******************************************************************************* Title: 演示程序 -LCD 1602 显示打印效果 * Name: LCD.c * Date: 2006-4-15 * Ver: 1.0 * * web: http://www.mcu99.com * ******************************************************************************** 从左至右,分2行打印 WELCOME TO WWW.MCU99.COM ********************************************************************************/
#include <reg51.h> #include <intrins.h> #define uchar unsigned char
typedef bit BOOL ;
sbit rs = P3^5; sbit rw = P3^6; sbit ep = P3^7;
void delay(uchar); void lcd_wcmd(uchar); BOOL lcd_bz(); void lcd_pos(uchar); void lcd_wdat(uchar); void display(uchar,uchar *);
uchar code dis1[] = {" WELCOME TO"}; uchar code dis2[] = {"WWW.MCU99.COM"};
void longdelay(uchar s) //长延时 { while(s--) { delay(80); } }
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(0x0d); //开显示,并显示光标 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); while(*q != '\0') { lcd_wdat(*q); q++; longdelay(2); } }
main() { lcd_init(); // 初始化LCD delay(10); display(0x00,dis1);
display(0x42,dis2); display(0x14,dis1); lcd_wcmd(0x07); //entry mode set delay(1); while(1) { } }
|