原创
自己写的1602液晶固定显示程序
2008-6-17 13:24
2338
1
2
分类:
工程师职场
/*********************************
调用c51头文件
*********************************/
#include<reg51.h>
/*********************************
定义常量、用到的量和字库
*********************************/
#define uint unsigned int
#define uchar unsigned char
sbit RS="P3"^0;
sbit RW="P3"^1;
sbit E="P3"^5;
sbit P1_7=P1^7;/*定义P1_7用来判断1602是否繁忙*/
void write();
void enable();
void delay();
void judge();
uchar no1[17]={0x41,0x42,0x43,0x44,
0x45,0x46,0x47,0x48,
0x49,0x4a,0x4b,0x4c,
0x4d,0x4e,0x4f,0x50,
0x00};/*ABCDEFGHIJKLMNOP*/
uchar no2[17]={0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,
0x59,0x5a,0x31,0x32,
0x33,0x34,0x35,0x36,
0x00};/*QRSTUVWXYZ123456*/
/**********************************
主函数
**********************************/
void main(void){
P1=0x01;/*清除屏幕*/
enable();
P1=0x38;/*使能8位2行5x7点阵*/
enable();
P1=0x0f;/*显示器开、光标开、闪烁开*/
enable();
P1=0x06;/*文字不动,光标自动右移*/
enable();
write();
while(1);/*显示保持*/
}
/*********************************
写入文字的子函数
*********************************/
void write(){
uint j="0",k=0,l=1,m=1;
P1=0x80;/*第一行使能*/
enable();
while(l){
if(no1[j]!=0x00){/*判断字符是否全部显示完全*/
P1=no1[j];
RS=1;
RW=0;
E=0;
judge();/*判断1602繁忙否*/
E=1;
j++;
}
else {l=0;}/*跳出第一行循环输出*/
}
P1=0x0c0;/*第二行使能*/
enable();
while(m){
if(no2[k]!=0x00){/*判断字符是否全部显示完全*/
P1=no2[k];
RS=1;
RW=0;
E=0;
judge();/*判断1602繁忙否*/
E=1;
k++;
}
else {m=0;}/*跳出第二行循环输出*/
}
}
/**********************************
使能操作的子函数
**********************************/
void enable(){
RS=0;
RW=0;
E=0;
delay();
E=1;
}
/**********************************
延时程序
**********************************/
void delay(){
uint i;
for(i=0;i<5000;i++);
}
/**********************************
判断1602是否繁忙的子程序
**********************************/
void judge(){
uint k;
P1=0xff;
RS=0;
RW=1;
E=0;
for(k=0;k<3000;k++);
E=1;
while(P1_7);
}
用户76592 2008-8-7 14:13