海尔液晶电视机怎么写程序

海尔液晶电视机怎么写程序,第1张

海尔液晶电视机写程序方法:

1、有参驱动这个液晶屏的程序。

2、有了程序要有编程器。

3、把这个驱动板上的存储IC取下,也可以在线ISp烧录。

4、要有电脑和基本的 *** 作即可。

//------file:12864h--------------------------------------------------//

#ifndef __12864_H__

#define __12864_H__

#include <reg52h>

#include <intrinsh>

sbit rs=P2^7;

sbit rw=P2^6;

sbit en=P2^5;

sbit psb=P2^4;

#define dataPort P0

void delayms(unsigned int n);

void checkBusy(void);

void writeCommand(unsigned char cmd);

void writeData(unsigned char adata);

unsigned char readData(void);

void ClrGDRAM(void);

void LcmInit(void);

void LcmPrint(unsigned char x,unsigned char y,unsigned char adata);

void disp_picture(unsigned char img);

void dispU_picture(unsigned char img);

void dispD_picture(unsigned char img);

void drawPoint(unsigned char x,unsigned char y,unsigned char color);

void drawRowLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char color);

void drawCollumLine(unsigned char x0,unsigned char y0,unsigned char y1,unsigned char color);

void drawLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char color);

#endif

//------file:12864c--------------------------------------------------//

#include "12864h"

void delayms(unsigned int n)

{

unsigned char i;

for(;n>0;n--)

for(i=0;i<100;i++);

}

void checkBusy(void)

{

rs=0;

rw=1;

en=1;

dataPort=0xff;

while(dataPort & 0x80);

en=0;

}

void writeCommand(unsigned char cmd)

{

checkBusy();

rs=0;

rw=0;

en=1;

dataPort=cmd;

_nop_();

en=0;

}

void writeData(unsigned char adata)

{

checkBusy();

rs=1;

rw=0;

en=1;

dataPort=adata;

_nop_();

en=0;

}

unsigned char readData(void)

{

unsigned char RData;

dataPort=0xff;

checkBusy();

rs=1;

rw=1;

en=0;

en=1;

RData=dataPort;

en=0;

return RData;

}

void ClrGDRAM(void)

{

unsigned char x,y;

for(y=0;y<64;y++)

for(x=0;x<16;x++)

{

writeCommand(0x34);

writeCommand(y+0x80); //行地址

writeCommand(x+0x80); //列地址

writeCommand(0x30);

writeData(0x00);

writeData(0x00);

}

//writeCommand(0x30);

}

void LcmInit(void)

{

writeCommand(0x30);

delayms(50);

writeCommand(0x01);

delayms(50);

writeCommand(0x06);

delayms(50);

writeCommand(0x0c);

ClrGDRAM();

psb=1;

}

//在坐标(x,y)处显示字符串

void LcmPrint(unsigned char x,unsigned char y,unsigned char adata)

{

unsigned char address;

unsigned char i=0;

switch (y)

{

case 0:address=0x80+x;break;

case 1:address=0x90+x;break;

case 2:address=0x88+x;break;

case 3:address=0x98+x;break;

default:break;

}

writeCommand(address);

while((adata+i))

{

writeData((adata+i));

i++;

}

}

/

函数名: disp_picture

函数说明: 显示一幅12864的图画

传入参数:图形指针img

传出参数:无

返回值: 无

/

void disp_picture(unsigned char img)

{

unsigned char i,j;

for(j=0;j<32;j++)

{

for(i=0;i<8;i++)

{

writeCommand(0x34);

writeCommand(0x80+j);

writeCommand(0x80+i);

writeCommand(0x30);

writeData(img[j16+i2]);

writeData(img[j16+i2+1]);

}

}

for(j=32;j<64;j++)

{

for(i=0;i<8;i++)

{

writeCommand(0x34);

writeCommand(0x80+j-32);

writeCommand(0x80+(i+8));

writeCommand(0x30);

writeData(img[j16+i2]);

writeData(img[j16+i2+1]);

}

}

writeCommand(0x36);

}

/

函数名: dispU_picture

函数说明: 上半屏显示一幅12832的图画

传入参数:图形指针img

传出参数:无

返回值: 无

/

void dispU_picture(unsigned char img)

{

unsigned char i,j;

for(j=0;j<32;j++)

{

for(i=0;i<8;i++)

{

writeCommand(0x34);

writeCommand(0x80+j);

writeCommand(0x80+i);

writeCommand(0x30);

writeData(img[j16+i2]);

writeData(img[j16+i2+1]);

}

}

writeCommand(0x36);

}

/

函数名: dispD_picture

函数说明: 下半屏显示一幅12832的图画

传入参数:图形指针img

传出参数:无

返回值: 无

/

void dispD_picture(unsigned char img)

{

unsigned char i,j;

for(j=0;j<32;j++)

{

for(i=0;i<8;i++)

{

writeCommand(0x34);

writeCommand(0x80+j);

writeCommand(0x80+(i+8));

writeCommand(0x30);

writeData(img[j16+i2]);

writeData(img[j16+i2+1]);

}

}

writeCommand(0x36);

}

/

函数名: drawPoint

函数说明:画点

传入参数:打点位置(x0,y0);color=1,点亮;color=0,擦除

传出参数:无

返回值: 无

/

void drawPoint(unsigned char x,unsigned char y,unsigned char color)

{

unsigned char row,collum,cbite;

unsigned char tempH,tempL;

writeCommand(0x34);

writeCommand(0x36);

collum=x>>4;

cbite=x&0x0f;

if(y<32)

row=y;

else

{row=y-32;

collum+=8;

}

writeCommand(0x80+row);

writeCommand(0x80+collum);

readData();

tempH=readData();

tempL=readData();

writeCommand(0x80+row);

writeCommand(0x80+collum);

if (color)

{

if(cbite<8)

{

tempH|=(1<<(7-cbite));

//tempL=(1<<(7-cbite));

}

else

{

//tempH=(1<<(15-cbite));

tempL|=(1<<(15-cbite));

}

}

else

{

if(cbite<8)

{

tempH&=~(1<<(7-cbite));

//tempL=(1<<(7-cbite));

}

else

{

//tempH=(1<<(15-cbite));

tempL&=~(1<<(15-cbite));

}

}

writeData(tempH);

writeData(tempL);

writeCommand(0x30);

}

/

函数名: drawRowLine

函数说明:画水平线

传入参数:(x0,y0),水平线的起点;(x1,y0)水平线的终点

color=1,点亮;color=0,擦除

传出参数:无

返回值: 无

/

void drawRowLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char color)

{

unsigned char temp;

if(x0>x1) // 对x0、x1大小进行排列,以便画图

{

temp = x1;

x1 = x0;

x0 = temp;

}

do

{

drawPoint(x0, y0, color); // 逐点显示,描出垂直线

x0++;

}

while(x1>=x0);

}

/

函数名: drawCollumLine

函数说明:画竖直线

传入参数:(x0,y0),竖直线的起点;(x1,y0)竖直线的终点;

color=1,点亮;color=0,擦除

传出参数:无

返回值: 无

/

void drawCollumLine(unsigned char x0,unsigned char y0,unsigned char y1,unsigned char color)

{

unsigned char temp;

if(y0>y1)

{

temp=y0;

y0=y1;

y1=temp;

}

while (y0<=y1)

{

drawPoint(x0,y0,color);

y0++;

}

}

/

函数名: drawLine

函数说明:使用Bresenham法,画任意两点间的直线

传入参数:(x0,y0),竖直线的起点;(x1,y1)竖直线的终点

color=1,点亮;color=0,擦除

传出参数:无

返回值: 无

/

void drawLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char color)

{

int dx; // 直线x轴差值变量

int dy; // 直线y轴差值变量

char dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向

char dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向

int dx_2; // dx2值变量,用于加快运算速度

int dy_2; // dy2值变量,用于加快运算速度

int di; // 决策变量

dx = x1-x0; // 求取两点之间的差值

dy = y1-y0;

if (dx<0) dx_sym=-1;

else

{

if(dx>0) dx_sym=1;

else

{

drawCollumLine(x0,y0,y1,color);

return;

}

}

if(dy>0) dy_sym=1;

else

{

if(dy<0) dy_sym=-1;

else

{

drawRowLine(x0,y0,x1,color);

return;

}

}

dx=dx_symdx;

dy=dy_symdy;

dx_2=dx2;

dy_2=dy2;

if(dx>=dy)

{

di=dy_2-dx;

while(x0!=x1)

{

drawPoint(x0,y0,color);

x0+=dx_sym;

if(di<0) di+=dy_2;

else

}

drawPoint(x0,y0,color);

}

else

{

di=dx_2-dy;

while(y0!=y1)

{

drawPoint(x0,y0,color);

y0+=dy_sym;

if(di<0) di+=dx_2;

else

}

drawPoint(x0,y0,color);

}

}

这种情况的故障原因是很多的要一一排除。

电视驱动板的程序问题或者小板的程序问题。

逻辑板的问题。

信号线材的问题。

强电干扰的问题。

屏线因温度融化的问题。

排线烧坏的问题。

要具体知道这种情况的要拿到电视后才知道,可以试试有没有声音,如果有声音就可以排除是驱动板的问题了。如果没有声音就可以确定是驱动板的问题了,然后去下载一个电视程序的ABK程序。如果你的不是网络电视就有点麻烦,因为单机的那种电视机程序是烧录进去的。

至于为什么会出现这种情况,因为有些主板会因为电压不问而程序丢失,这种不是一次两次了,我遇到的很多,重新烧录一个就可以的。

买个烧写器是最终的选择,想靠升级小板升级所有品牌的主板上的Flash太不现实,采用升级小板进行升级有的需要串口,有的需要并口。而且还需要很多升级工具,对维修来说不现实。还不如一步到位买个西尔特580U或志远X5的烧写器有了这两个烧写器几乎所有型号的Flash都可以烧写也可以读出,专业液晶维修的烧写器是必不可少的

以上就是关于海尔液晶电视机怎么写程序全部的内容,包括:海尔液晶电视机怎么写程序、我用c8051f020单片机控制液晶显示,写了一个程序烧录进去,可是有时候液晶显示了,有时候不显示、液晶电视屏幕出现这种情况怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10167891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存