发表于:2005/10/6 18:15:00
#0楼
本显示屏用是的240X128屏,控制器是:T6963C。一列显示15个16X16汉写可以显示8行。
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
//我的t6963c的程序(C语言)
//我可是倾囊相售了,大家看完帮顶下,可以让更多人看到
//是我花不少时间编写调试成功的,希望对大家有用。
//取模方式:行列式,顺向(高位在前。)
#include <reg51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
//#define lcd_cmd_addr 0x8100 //lcd指令口地址,如果用总线的方式,我的程序是用间接的方式的
//#define lcd_dat_addr 0x8000 //lcd数据口地址
#define gra_first_addr 0x0000 //图形区首地址
#define linewidth 30 //图形区宽度
#define dataport P0 //液晶接的数据接口。
sbit cd=P2^0; //命令 数据
sbit ce=P2^1; //片信号。
sbit wr=P3^6; //读信号
sbit rd=P3^7; //写信号
unsigned int graphicpos; //变量中存放妆前的图形区首地址
void lcddelay(unsigned int time)
{
unsigned int i;
for(i=0;i<time;i++);
}
/*
lcdwait:根据参数STA的值,等待直到某一个状态满足条件。
STA:0:读写条件
1:自动读
2:自动写
void lcdwait(unsigned char sta)
{
unsigned char lcdstate;
while(1)
{
lcddelay(2);
ce=0;
cd=1;
rd=1;
wr=1;
dataport=0xff; //读之前要先给数据口送0XFF。
rd=0;
lcdstate=dataport; //读出数据。
rd=1;
ce=1;
if(sta==0)
{if((lcdstate&0x03)==0x03) break;
}
else if(sta==1)
{if((lcdstate&0x04)==0x04) break;
}
else if(sta==2)
{if((lcdstate&0x08)==0x08) break;
}
else break;
}
}
/*
lcdcommand :写命令到LCD命令口
DAT1:参数1
DAT2:参数2
DAT3:参数3
CMD:命令字
PNUM:参数个数
如果只有一个参数,则存放到DAT1中。
*/
void lcdcommand(unsigned char dat1,unsigned char dat2,unsigned char cmd,unsigned char pnum)
{
if ((pnum==1)||(pnum==2))
{
lcdwait(0);
ce=0;
cd=0;
wr=0;
dataport=dat1; //写数据
wr=1;
cd=1;
ce=1;
}
if (pnum==2)
{
lcdwait(0);
ce=0;
cd=0;
wr=0;
dataport=dat2; //写数据
wr=1;
cd=1;
ce=1;
}
lcdwait(0);
ce=0;
cd=1;
wr=0;
dataport=cmd; //写向命令口写入命令字
wr=1;
ce=1;
}
/*
dispchar:在指定的位置显示一个8X16的西文字符,要显示一个汉字就要两个西文
xpos:距左上角的横向显示字符的位置
ypos:距左上角的纵向显示字符的位置
index:字符码
*/
void dispchar(unsigned char xpos,unsigned char ypos,unsigned int index)
{
unsigned int addr;
unsigned int mya;
extern unsigned char code modetable[];
unsigned int lrampos;
lrampos=ypos*linewidth+xpos+graphicpos;//计算LCDRAM对应的地址
for (addr=(index*16);addr<(index+1)*16;addr++)
{
lcdcommand(lrampos,lrampos>>8,0x24,2);
mya=addr;
lcdcommand(modetable[addr],0,0xc4,1);
lrampos+=linewidth;
}
}
/*
dispchword:在指定的位置显示一个汉字就要两个西文
xpos:距左上角的横向显示字符的位置
ypos:距左上角的纵向显示字符的位置
index:字符码
*/
void dispchword(unsigned char xpos,unsigned ypos,unsigned index)
{
dispchar(xpos,ypos,index);
dispchar(xpos+1,ypos,index+1);
}
/*
清屏功能:利用向数据单元填充00的办法清屏。
*/
void lcdclr()
{ unsigned int i=16384; //240x128的屏总共有:128X128=16384个单元。
lcdcommand(0,0,0x24,2); //设填充开始地址
do
{ lcdcommand(0x00,0,0xc0,1); //写入填充数据,数据指针自动加1
}while(i--);
lcdcommand(0x00,0,0xb2,0); //读写自动结束。
}
/*
void lcdint():初始化LCD。
*/
void lcdint()
{
lcdcommand(0x00,0x00,0x42,2); //设置图形区首地址
lcdcommand(linewidth,0x00,0x43,2); //设置图形区的宽度
lcdcommand(0,0,0x9b,0); //设置显示开关为开文字、开图形显示
lcdcommand(0,0,0x80,0); //设置显示方式为合成
lcdclr(); //清屏。
}
void main()
{unsigned char i,j,k=0;
lcdint();
lcddelay(1000);
for(i=0;i<128;i+=16)
{
for(j=0;j<30;j+=2)
{dispchword(j,i,k);
k+=2;
}
}
while(1);
}
看贴要回帖!本显示屏用是的240X128屏,控制器是:T6963C。一列显示15个16X16汉写可以显示8行。
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
//我的t6963c的程序(C语言)
//我可是倾囊相售了,大家看完帮顶下,可以让更多人看到
//是我花不少时间编写调试成功的,希望对大家有用。
//取模方式:行列式,顺向(高位在前。)
#include <reg51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
//#define lcd_cmd_addr 0x8100 //lcd指令口地址,如果用总线的方式,我的程序是用间接的方式的
//#define lcd_dat_addr 0x8000 //lcd数据口地址
#define gra_first_addr 0x0000 //图形区首地址
#define linewidth 30 //图形区宽度
#define dataport P0 //液晶接的数据接口。
sbit cd=P2^0; //命令 数据
sbit ce=P2^1; //片信号。
sbit wr=P3^6; //读信号
sbit rd=P3^7; //写信号
unsigned int graphicpos; //变量中存放妆前的图形区首地址
void lcddelay(unsigned int time)
{
unsigned int i;
for(i=0;i<time;i++);
}
/*
lcdwait:根据参数STA的值,等待直到某一个状态满足条件。
STA:0:读写条件
1:自动读
2:自动写
void lcdwait(unsigned char sta)
{
unsigned char lcdstate;
while(1)
{
lcddelay(2);
ce=0;
cd=1;
rd=1;
wr=1;
dataport=0xff; //读之前要先给数据口送0XFF。
rd=0;
lcdstate=dataport; //读出数据。
rd=1;
ce=1;
if(sta==0)
{if((lcdstate&0x03)==0x03) break;
}
else if(sta==1)
{if((lcdstate&0x04)==0x04) break;
}
else if(sta==2)
{if((lcdstate&0x08)==0x08) break;
}
else break;
}
}
/*
lcdcommand :写命令到LCD命令口
DAT1:参数1
DAT2:参数2
DAT3:参数3
CMD:命令字
PNUM:参数个数
如果只有一个参数,则存放到DAT1中。
*/
void lcdcommand(unsigned char dat1,unsigned char dat2,unsigned char cmd,unsigned char pnum)
{
if ((pnum==1)||(pnum==2))
{
lcdwait(0);
ce=0;
cd=0;
wr=0;
dataport=dat1; //写数据
wr=1;
cd=1;
ce=1;
}
if (pnum==2)
{
lcdwait(0);
ce=0;
cd=0;
wr=0;
dataport=dat2; //写数据
wr=1;
cd=1;
ce=1;
}
lcdwait(0);
ce=0;
cd=1;
wr=0;
dataport=cmd; //写向命令口写入命令字
wr=1;
ce=1;
}
/*
dispchar:在指定的位置显示一个8X16的西文字符,要显示一个汉字就要两个西文
xpos:距左上角的横向显示字符的位置
ypos:距左上角的纵向显示字符的位置
index:字符码
*/
void dispchar(unsigned char xpos,unsigned char ypos,unsigned int index)
{
unsigned int addr;
unsigned int mya;
extern unsigned char code modetable[];
unsigned int lrampos;
lrampos=ypos*linewidth+xpos+graphicpos;//计算LCDRAM对应的地址
for (addr=(index*16);addr<(index+1)*16;addr++)
{
lcdcommand(lrampos,lrampos>>8,0x24,2);
mya=addr;
lcdcommand(modetable[addr],0,0xc4,1);
lrampos+=linewidth;
}
}
/*
dispchword:在指定的位置显示一个汉字就要两个西文
xpos:距左上角的横向显示字符的位置
ypos:距左上角的纵向显示字符的位置
index:字符码
*/
void dispchword(unsigned char xpos,unsigned ypos,unsigned index)
{
dispchar(xpos,ypos,index);
dispchar(xpos+1,ypos,index+1);
}
/*
清屏功能:利用向数据单元填充00的办法清屏。
*/
void lcdclr()
{ unsigned int i=16384; //240x128的屏总共有:128X128=16384个单元。
lcdcommand(0,0,0x24,2); //设填充开始地址
do
{ lcdcommand(0x00,0,0xc0,1); //写入填充数据,数据指针自动加1
}while(i--);
lcdcommand(0x00,0,0xb2,0); //读写自动结束。
}
/*
void lcdint():初始化LCD。
*/
void lcdint()
{
lcdcommand(0x00,0x00,0x42,2); //设置图形区首地址
lcdcommand(linewidth,0x00,0x43,2); //设置图形区的宽度
lcdcommand(0,0,0x9b,0); //设置显示开关为开文字、开图形显示
lcdcommand(0,0,0x80,0); //设置显示方式为合成
lcdclr(); //清屏。
}
void main()
{unsigned char i,j,k=0;
lcdint();
lcddelay(1000);
for(i=0;i<128;i+=16)
{
for(j=0;j<30;j+=2)
{dispchword(j,i,k);
k+=2;
}
}
while(1);
}
**内容隐藏回复可见**
看贴要回帖!本显示屏用是的240X128屏,控制器是:T6963C。一列显示15个16X16汉写可以显示8行。
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
[此贴子已经被作者于2005-10-15 12:24:57编辑过]
135元10点PLC,6点输入,4点继电器输出,带外壳、开关电源。
WWW.FXPLC.CN
WWW.FXPLC.CN