| 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | 
您现在的位置: 21嵌入式控制研究室 >> 嵌入式操作系统 >> 综合 >> 文章正文 用户登录 新用户注册
[推荐]用C51写的液晶驱动程序            【字体:
用C51写的液晶驱动程序
作者:佚名    文章来源:21control    点击数:    更新时间:2005-12-9
//author:wen-guang

//一屏显示"12345678"

#include
#include
#include
#include
#define uchb unsigned char bdata
#define uchd unsigned char data
#define uchi unsigned char idata
#define uchp unsigned char pdata
#define uchx unsigned char xdata
#define uchc unsigned char code
#define DISPON 0x3f
#define DISPOFF 0x3e
#define LEFT 1
#define RIGHT 0
#define HIGH 1
#define LOW 0
#define BUFLEN 8
#define HEAD 0xad
#define SLCTCARD 0x57
#define DISPMSG 0x55
#define CHKCARD 0x53
#define PWRON 0x51
sbit CS1=P2^7;
sbit CS2=P2^3;
sbit LC1=P3^2;
sbit LCDE=P3^3;
sbit LC2=P3^6;
sbit RS=P3^7;
/*E=LCDE;
RS=D/I;
*/

uchc pwait[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

uchc apixs[]={
0xF0,0xF8,0x0C,0xC4,0x0C,0xF8,0xF0,0x00,0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,
0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,
0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,
0x7C,0x7C,0x44,0x44,0x44,0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,
0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,
0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,
0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00,0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,
0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,
0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,
0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00
};
void init51(); //8051 internal initial
void lcminit(); //LCM display initial
void delayxms(uchd dsec, uchd csec, uchd msec);
void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num );
void lcmwdatum(bit lr,uchd datum);
void lcmwcmm(bit lr,uchd command);

void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist);
void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num);



void main(void)
{
delayxms(1,10,100);
init51();
delayxms(1,100,100);
lcminit();
lcmclr(0,0,8,128);
while(1){

dispch(pwait,3,0,0,8,20);

}

void delayxms(uchd dsec, uchd csec, uchd msec)
{
uchd time0;
uchd time1;
uchd time2;
for(time0=0;time0 for(time1=0;time1 for(time2=0;time2 ;
}
void init51()
{
delayxms(1,10,100);
/*LC1=0;
LC2=0;*/
CS1=CS2=HIGH;
_nop_();
RS=LCDE=LOW;
}
void lcmwdatum(bit lr,uchd datum)
{
LCDE=LOW; RS=HIGH;
if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
else {CS1=HIGH; CS2=LOW;} //select right half of LCM
P0=datum; //write display data to LCM
LCDE=HIGH; LCDE=LOW; //__/--\__
CS1=CS2=HIGH;
}
void lcmwcmm(bit lr,uchd command)
{
LCDE=LOW; RS=LOW;
if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
else {CS1=HIGH; CS2=LOW;} //select right half of LCM
P0=command; //write command to LCM
LCDE=HIGH; LCDE=LOW; //__/--\__
CS1=CS2=HIGH;
}

void lcminit()
{
lcmwcmm(LEFT,DISPOFF); //left half of LCM off
lcmwcmm(RIGHT,DISPOFF); //right half of LCM off
lcmwcmm(LEFT,0xc0); //set start display line 0
lcmwcmm(RIGHT,0xc0); //set start display line 0
lcmwcmm(LEFT,DISPON); //left half of LCM off
lcmwcmm(RIGHT,DISPON); //right half of LCM off
}
void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num )
{
uchd cur_col,cur_page;
//lcmwcmm(LEFT,DISPOFF);
//lcmwcmm(RIGHT,DISPOFF);
for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
{
if(cur_col<0x40)
{
lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
lcmwdatum(LEFT,0); //clear to 0
}
else
{
lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
lcmwdatum(RIGHT,0); //clear to 0
}
}
//lcmwcmm(LEFT,DISPON);
//lcmwcmm(RIGHT,DISPON);
}
void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist)
{
uchd byte_c;
uchd cur_page=start_page;
uchd cur_col=start_col;
for(byte_c=0;byte_c
disp(apixs+(*straddr)*16,cur_page,cur_col,2,8);
cur_col=cur_col+dist-4; 

straddr++;
}

}
void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num)
{
uchd cur_col,cur_page;
uchc * chp;
chp=pixaddr;
for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
{
if(cur_col<0x40)
{
lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
lcmwdatum(LEFT,*chp); //write display data to LCM
chp++;
}
else
{
lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
lcmwdatum(RIGHT,*chp); //write display data to LCM
chp++;
}
}
}

文章录入:flyongrass    责任编辑:rouder 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 嵌入式Linux开发工具选择和应…

  • 一步一步的制作arm-linux 交…

  • 高可用性系统的硬件和软件设…

  • 利用电子邮件实现与网络嵌入…

  • 什么样的处理器会引领嵌入式…

  • 配合Tornado使用的Wind Powe…

  • 嵌入式Internet技术及其应用…

  • 嵌入式Internet技术及其应用…

  • 嵌入式Internet技术及其应用…

  • 嵌入式Internet技术及其应用…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)