https://static.assets-stash.eet-china.com/album/old-resources/2009/5/12/24889110-de14-4408-b3af-77e778a743b5.rarLCD1602显示(C语言)
/*显示" Shan qing gong "
" tong xin 06-2 " (呵呵,我是学通信的)
lcd基本显示程序
四条数据线输入:DB4—RB0,DB5—RB1,DB6—RB2,DB7—RB3
寄存器选择RS接RB4,为"L"指令寄存器,为"H"数据寄存器
读写使能控制线E,接RE2,每当E线向LCD模块发送一个正脉冲,LCD模块与单片机之间将进行一次数据交换;
声明:之前一直在整51单片机,现在开始学PIC,整了一个液晶显示程序,和大家分享*/
//**********定义与声明*******************
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define E RE2
#define RS RB4
uchar i,num,byte,ys;
uchar const table[]=" Shan qing gong "; //为什么2009前面要空开两个才能显示后空开1个儿呢?这个定义要小心!一定要用uchar const,不要丢了uchar,也不要用code
uchar const table1[]=" tong xin 06-2 "; //4第二数组定义初值
void lcd_init(void);
void writecom(char);
void writedata(char);
void delay(uint z) //5延迟函数常用
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//***************主函数*****************
void main()
{
lcd_init();
while(1)
{
;
}
}
//*******lcd initial***************关于LCD的初始化
void lcd_init()
{
TRISB=0x00;
TRISE=0x00;
PORTB=0X00;
writecom(0x28); //将LCD设置成4为数据方式,两行显示,5*7点阵
writecom(0x0C); //显示控制:打开显示,
writecom(0x06); //设置输入模式
writecom(0x01); //清LCD
writecom(0x80);
for(num=0;num<16;num++) //循环
{
writedata(table[num]);
delay(1);
}
writecom(0x80+0x40); //11液晶显示第二行时分秒
for(num=0;num<15;num++)
{
writedata(table1[num]);
delay(1);
}
}
//********写命令控制*****************
void writecom(char i)
{
byte=i;
i=i>>4;
PORTB=i;
RS=0;
E=1;
for(ys=10;ys>0;ys--);
E=0;
PORTB=byte;
RS=0;
E=1;
for(ys=10;ys>0;ys--);
E=0;
}
//********写数据控制*****************
void writedata(char i)
{
byte=i;
i=i>>4;
PORTB=i;
RS=1;
E=1;
for(ys=10;ys>0;ys--);
E=0;
PORTB=byte;
RS=1;
E=1;
for(ys=10;ys>0;ys--);
E=0;
}
用户377235 2012-4-12 13:04
tengjingshu_112148725 2009-5-12 17:29