海尔液晶电视机写程序方法:
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单片机控制液晶显示,写了一个程序烧录进去,可是有时候液晶显示了,有时候不显示、液晶电视屏幕出现这种情况怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)