电工吧
◎ 电工吧 >> 设为首页 >> 加入收藏>> 联系方式 >> 投稿 >>留言 
网站首页 · 电工新闻 · 电工基础 · 电力技术 · 电子技术 · 电工图片 · 电工法规 · 电工图书 · 电工搜索 · 论坛交流
 
      最新电子论文
 · 开关电源设计知识介绍(中 
 · 印制电路板设计原则和抗干 
 · 电路设计常用软件介绍 
 · 各种滤波电路的比较 
 · 激光头维修的简便方法 
 · 回扫线现象全面剖析 
 · 线性NTC温度传感器使用指南 
 · 变压器的基本知识 
      推荐电子论文

 · 单片机初学者编程最简练的指导
 · 电力行业蓄电池容量测试方案
 · 定点dsp与浮点dsp的比较
 · 永不消逝的电波
 · 分时操作系统思想在单片机编程
 · PC机打印口与便携式数据采集系
 · 单线数字温度传感器的原理与应
 · 一个单片机串行数据采集,传输
 · PLD应用的方方面面
 · 一种纸币识别系统的设计

  ■ 所在位置:首页>>电子技术>>电子应用>>正文
 

LCD驱动芯片1335控制器C51源程

/*include files */
#i nclude "w78e58.h"
//#i nclude "zimo.h" //这是自己做的一个汉字库,
可以在本站下载一个字模程序,添加汉字。
世纪开发网:21hf.com*/
#i nclude "stdio.h"
#i nclude "stdlib.h"
#i nclude "math.h"
#i nclude "absacc.h"
#i nclude "intrins.h"
#i nclude "string.h"

/*define function*/
#define HIBYTE(V1) ((BYTE)((V1)>>8))
#define LOBYTE(V1) ((BYTE)((V1)&0Xff))
#define MAKEWORD(V1,V2) ((((WORD)(V1))<<8)+(WORD)(V2))

/*define SED1335 port address*/
#define SEDWRCOM XBYTE[0X1100] //写指令代码
#define SEDRDCSR XBYTE[0X1100] //读光标指针
#define SEDWRDAT XBYTE[0X1000] // 写指令参数和显示数据

/*define LCD code */
#define SYSSET 0x40
#define SCROLL 0x44
#define SLEEP 0x53
#define DISPON 0x59
#define DISPOFF 0x58
#define OVLAY 0x5b
#define HDOTSCR 0x5a
#define CSRFORM 0x5d
#define CGRAMADR 0x5c
#define CSRRGT 0x4c
#define CSRLFT 0x4d
#define CSRUP 0x4e
#define CSRDOWN 0x4f
#define CSRW 0x46
#define CSRR 0x47
#define MWRITE 0x42
#define MREAD 0x43
#define AP 30

/*define screen flag*/
BOOL FG_FIRST=0;
BOOL FG_MAIN=0;
BOOL FG_PWD=0;
BOOL FG_PRG=0;
BOOL FG_PRG1=0;
BOOL FG_PRG2=0;
BOOL FG_PRG3=0;
BOOL FG_CYCLE=0;
BOOL FG_LIMIT=0;
BOOL FG_TIME=0;
BOOL FG_INPUT=0;
BOOL FG_OUTPUT=0;
BOOL FG_PID=0;
BOOL FG_SELFCTL=0;
BOOL FG_VARY=0;

/*LCD initial parameters*/
BYTE code SYSTAB[8]={0x30,0x87,0x0f,0x1d,0x4c,0xa0,0x1e,0x00};
BYTE code SCRTAB[10]={0x00,0x00,0xa0,0x00,0x40,0xa0,0x00,0x80,0x00,0x00};

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*START OF THE PROGRAME*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


/*SBUROUTINES OF LCD DRIVE*/
void WLCDCOM(BYTE com )
//写LCD控制命令
{
SEDWRCOM=com;
_nop_();
}

void WLCDDATA(BYTE ref )
//写LCD控制参数和显示字符数据
{
SEDWRDAT=ref;
_nop_();
}

void CLRVRAM(void)
//显示存储器清零
{
WORD i,j;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0x00);
WLCDDATA(0x00);
WLCDCOM(MWRITE);
for(i=0;i<=0xff;i++)
{
for(j=0;j<=0xff;j++)
{
WLCDDATA(0x00);
}
}
}

void CLRSCREEN(void)
//清除显示屏幕
{
WORD i,j;
WLCDCOM(CSRRGT);
WLCDCOM(CSRW);
WLCDDATA(0X00);
WLCDDATA(0X00);
WLCDCOM(MWRITE);
for(i=0;i<0xa0;i++)
{
for(j=0;j {
WLCDDATA(0x00);
}
}
}

void WNUMBER(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示0~9等10个数字,num为要显示的数字的值(16×8)
//x坐标寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b,c;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}

WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=0;c<16;c++)
{
WLCDDATA(*(*(p+num)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}
}

void WBLOCK(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示16×8点字符,num为要显示的字符块长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
{
WORD temp;
BYTE hi,lo;
BYTE a,b,c;
temp=y*AP;
hi=HIBYTE(temp);
lo=LOBYTE(temp);
lo=x+lo;
if(CY==1) {hi+=0x01;CY=0;}

WLCDCOM(CSRDOWN);
WLCDCOM(CSRW);
WLCDDATA(lo);
WLCDDATA(hi);
WLCDCOM(MWRITE);
for(c=0;c<16;c++)
{
WLCDDATA(*(*(p+num-1)+c));
}
lo=lo+0x01;
if(CY==1) {hi+=0x01;CY=0;}

本新闻共2页,当前在第1页  [1]  [2]  

 
         相关文章

 
 
  关于本站 | 友情站点 | 联系方式 | 版权声明 | 电工技术服务与支持中心
Copyright© 2005-2006 Dg8.Com.CN ,All Rights Reserved
电工网 电工吧 电子吧