您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

HD44780液晶驱动程序

[日期:2008-01-30 ] [来源:网络 作者:佚名] [字体: (投递新闻)
#include <reg51.h>
#include <intrins.h>

sbit gnd_lcd=p1^7;
sbit rs=p1^0;
sbit rw=p1^1;
sbit e=p1^2;

unsigned char busy(void);
void ctrl(unsigned char);
void wd_h(unsigned char);
void wd_l(unsigned char);
unsigned char rd(void);
void write(unsigned char);
void init(void);
void nop(void);

void disp(unsigned char);


unsigned int time;

void int_t0 (void) interrupt 1 {
 tl0=tl0+30;th0=0xfb;
 time++;
}

void wait(unsigned int w){ 
 time=0;
 while (time<w) {}
}


void init(void) {
 unsigned char i;
 p1=0;
 for (i=0;i<2;i++) {
  wd_l(0x30);
  wait(5);
 }
 wd_h(0x20);
 ctrl(0x28);
 ctrl(0x8);
 ctrl(3);
 ctrl(6);
 disp(0);
 ctrl(1);
 ctrl(8);
 ctrl(0xe);
 ctrl(0x80);
}


unsigned char busy(void){
 p1=0;
 return(rd());
}

unsigned char rd(void) {
 unsigned char dat0,dat1;
 rw=1;
 rs=0;
 p1=p1|0x78;
 e=1;
 dat0=p1;
 e=0;
 e=1;
 dat1=p1;
 p1=0;
 return(((dat0<<1)&0xf0) | ((dat1>>3)&0xf) );
}

void ctrl(unsigned char dat){
 while (busy()>0x7f) {};
 rw=rs=0;
 wd_h(dat);
 wd_l(dat);
}
void wd_h(unsigned char dat){
 e=1;
 p1=p1|((dat&0xf0)>>1);
 e=0;
 p1=p1&0x87;
}
void wd_l(unsigned char dat){
 e=1;
 p1=p1|((dat&0xf)<<3);
 e=0;
 p1=0;
}
void write(unsigned char dat) {
 while (busy()>0x7f) {};
 rw=0;
 rs=1;
 wd_h(dat);
 wd_l(dat);
}

//===================================================
void disp(unsigned char i) {
 unsigned char j;
 ctrl(1);
 ctrl(0x80);
 for (j=0;j<6;j++) write(d[i][j]);
 write(' ');
 ctrl(0xc0);
 write('-');
 write('-');
 write('-');
 write('-');
 write('-');
 write('-');
 write('k');
 write('m');
}

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐