登录
首页 单片机论坛
回帖 发帖
正文

主题:我的液晶显示屏:240 x 128 的大屏,发上来大家看看,用的是51的单片机!

点击:2314 回复:4

本显示屏用是的240X128屏,控制器是:T6963C。一列显示15个16X16汉写可以显示8行。
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
附件
附件
附件
//我的t6963c的程序(C语言)
//我可是倾囊相售了,大家看完帮顶下,可以让更多人看到
//是我花不少时间编写调试成功的,希望对大家有用。
//取模方式:行列式,顺向(高位在前。)
#include
#include
#include
#include
//#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      }
/*
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);
}
[replyview][/replyview]
看贴要回帖!本显示屏用是的240X128屏,控制器是:T6963C。一列显示15个16X16汉写可以显示8行。
这是一个32路,K型热电隅温控的控制器的显示界面。想用温控的朋友可以找我!……^_^.
qq:283870012
最后修改:2005-10-15 12:24:57
05-10-06 18:15
我虽然看不懂,但也帮忙顶一下.
05-10-06 18:30
05-10-07 22:52
楼主能否把温控的电路图贴出来?
05-10-11 20:42
楼主,可不可以把温控的电路图发一个给我?谢谢!jiawenang@1633.com
05-10-13 14:12

工控新闻

更多新闻资讯