液晶电视怎样写程序

液晶电视怎样写程序,第1张

怎样给液晶电视写程序

首先你得有参驱动这个液晶屏的程序,有了程序要有编程器,可以把这个驱动板上的存储IC取下,也可以在线ISp烧录,还要有电脑,基本的 *** 作要会,如果刷错了知道如何判断,就这样

液晶电视写程序怎么写

只需要准备一个U盘就可以更换所有的LVDS接口的液晶屏程序。

U盘升级方法:

把屏所对应的程序复制到U盘中

把U盘插到板上的USB口上

接上按键板,按住按键板上的任意一个按键再通电,直到看到按键板上的指示灯出现红绿交替闪烁后,再松开按键,直到指示灯闪烁结束后,拔掉电源,再拔掉U盘就OK了,重新通电即可

液晶电视怎样写程序

如果你不是做维修的,我建议你不要自己刷,否则有可能废掉主板,刷写程序可不是玩耍玩耍就可以的,得通过专门的程序来刷写,刷写成功,都无所谓,但是刷写失败,若还能刷写成功就成功了,若失败则直接废了,所以慎行啊。

怎样给液晶电视写程序

我卖了个R809F编程器400元,现在只用它改了DVD遥控器,DVD画面,中九。它能读写液晶彩电数据。可写液晶彩电我还没试遇到钉,知道一定告诉你。

液晶电视如何写程序

你家电视带win系统的?

液晶电视机怎样编程

objectMainextendsApp{

varreverse_pairs = 0逆序数

defmsort[T](cmp:(T, T) => Boolean)(l:List[T]):List[T] = {

defmerge(l1:List[T], l2:List[T]):List[T]=(l1, l2)match{

case(Nil, _) => l2

case(_, Nil) => l1

case(x::left1, y::left2) =>

if(cmp(x, y))

x::merge(left1, l2)

else{

reverse_pairs += l1length

y::merge(l1, left2)

}

}

valn = llength / 2

if(n == 0)

return l

else{

val(l1, l2) = lsplitAt(n)

merge(msort(cmp)(l1), msort(cmp)(l2))

}

}

println(msort((x:Int, y:Int) => x

println(reverse_pairs)

}

液晶电视写程序的软件在哪里下载

程序:机型、机芯、配屏、程序选项

如何给液晶电视写数据

维修工具容易买,维修数据难寻啊。以后液晶电视机的内部软件更强大 查看原帖>>

请问液晶电视最简单的刷程序的方法是怎样弄

这个没法刷,除非系统统一升级过。内存太小,一刷就没了

液晶电视怎么写数据 用什么工具

维修工具容易买,维修数据难寻啊。以后液晶电视机的内部软件更强大 查看原帖>>

应该不是判断忙碌或者不只是判断忙碌,这个语句应该是送了一串命令进去

//HD44780 LCD DRIVER

#include <AT89X52H>

#include <ctypeh>

//LCD Commands

#define LCD_CLS 1 //Clears entire display and sets DDRAM address 0

#define LCD_HOME 2 //Sets DDRAM address 0 in address counter

#define LCD_SETMODE 4 //Sets cursor move direction and specifies display shift

#define LCD_SETVISIBLE 8 //Sets entire display (D) on/off,cursor on/off (C), and blinking of cursor position character (B)

#define LCD_SHIFT 16 //Moves cursor and shifts display without changing DDRAM contents

#define LCD_SETFUNCTION 32 //Sets interface data length (DL), number of display lines (N), and character font (F)

#define LCD_SETCGADDR 64 //Sets CGRAM addressCGRAM data is sent and received after this setting

#define LCD_SETDDADDR 128 //Sets DDRAM address DDRAM data is sent and received after this setting

#define TURE 1

#define FORSE 0

#define TMH 0xf8 //delay timeh 2ms

#define TML 0xCD //delay timel

//------------------------------------------

#define MAX_DISPLAY_CHAR 2

//-----------------------------------------

unsigned char code text[6]="hellow";

static unsigned char data counter,a;

void wcchar(unsigned char d); //write a command char

void wdchar(unsigned char i); //write a data char

char wtbusy(); //wait busy sign

void clrscr(void); //clear screen

void initime0(void); //initial time0

void delay(unsigned char i); //delay

//-------------------------------

unsigned char crc8(unsigned char pData,unsigned char count);

unsigned char pData[]={0x33,0x12,0x34,0x56,0x78,0x33,0x12,0x23,0x45,0x56};

unsigned char data crc;

static char outputbuffer[MAX_DISPLAY_CHAR];

char calc_decascii(char num);

//-------------------------------

void ISR_Timer0(void) interrupt 1

{

TL0=TML;

TH0=TMH;

counter--;

}

void ISR_Int0(void) interrupt 0

{

wdchar(text[a++]); //display "hellow"

if (a>=6)

{a=0;wdchar(' ');}

}

//main program display "hellow"

main(void)

{

unsigned char data k;

initime0();

wcchar(0x38); //initial lcd

wcchar(LCD_SETVISIBLE+6); //set lcd visible

clrscr(); //clear lcd

while(1)

{

crc8(&pData,10);

calc_decascii(crc);

wdchar (outputbuffer[1]);

wdchar (outputbuffer[2]);

wdchar (' ');

for(k=0;k<=6;k++)

{

// wdchar(text[k]); //display "hellow"

P1_2=0;

delay(55); //delay

P1_2=1;

delay(55); //delay

}

}

}

//sub function || display a char

void wdchar(unsigned char i) //write a char

{

unsigned char xdata j;

P1_0=1;

P1_1=0;

j=0x8000;

j=i;

while (wtbusy())

{}

}

void wcchar(unsigned char d) //write a command char

{

unsigned char xdata j;

P1_0=0;

P1_1=0;

j=0x8000;

j=d;

while (wtbusy())

{}

}

char wtbusy() //wait busy sign

{

unsigned char xdata j;

P1_0=0;

P1_1=1;

j=0x8000;

if(j&0x80)

{

return TURE;

}

else

{

return FORSE;

}

}

//clear screen

void clrscr()

{

wcchar(LCD_CLS);

}

//initial time0

void initime0()

{

TL0=TML;

TH0=TMH;

TR0=TURE;

IE=0x93; //Enable T0 and Serial Port

}

//sub function time delay

void delay(unsigned char i)

{

counter=i;

while (counter)

{}

}

unsigned char crc8(unsigned char pData,unsigned char count)

{

// unsigned char crc;

crc = 0;

while (count-- > 0)

{

crc ^= pData++;

}

return crc;

}

char calc_decascii(char num)

// A rather messy function to convert a floating

// point number into an ASCII string

{ long data temp = num;

char data arrayptr = &outputbuffer[MAX_DISPLAY_CHAR];

long data divisor = 10;

long data result;

char data remainder,asciival;

int data i;

// If the result of the calculation is zero

// insert a zero in the buffer and finish

if (!temp)

{ arrayptr = 48;

goto done;

}

// Handle Negative Numbers

if (temp < 0)

{ outputbuffer[0] = '-';

temp -= 2temp;

}

for (i=0 ; i < sizeof(outputbuffer) ; i++)

{ remainder = temp % divisor;

result = temp / divisor;

// If we run off the end of the number insert a space into

// the buffer

if ((!remainder) && (!result))

{ arrayptr = ' ';}

// We're in business - store the digit offsetting

// by 48 decimal to account for the ascii value

else

{ asciival = remainder + 48;

arrayptr = asciival;

}

temp /= 10;

// Save a place for a negative sign

if (arrayptr != &outputbuffer[1]) arrayptr--;

}

done: return outputbuffer;

}

顶层文件 万年历C #include<reg51h> #include "LCD1602h" #include "DS1302h" #define uchar unsigned char #define uint unsigned int sbit speaker=P2^4; bit key_flag1=0,key_flag2=0; SYSTEMTIME adjusted; uchar sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0; uchar data_alarm[7]={0}; /键盘控制/ int key_scan() //扫描是否有键按下 { int i=0; uint temp; P1=0xf0; temp=P1; if(temp!=0xf0) i=1; else i=0; return i; } uchar key_value() //确定按键的值 { uint m=0,n=0,temp; uchar value; uchar v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ; P1=0xfe; temp=P1; if(temp!=0xfe)m=0; P1=0xfd;temp=P1 ;if(temp!=0xfd)m=1; P1=0xfb;temp=P1 ;if(temp!=0xfb)m=2; P1=0xf7;temp=P1 ;if(temp!=0xf7)m=3; P1=0xef;temp=P1 ;if(temp!=0xef)n=0; P1=0xdf;temp=P1 ;if(temp!=0xdf)n=1; P1=0xbf;temp=P1 ;if(temp!=0xbf)n=2; value=v[m][n]; return value; } /设置闹铃函数/ void naoling(void) { uchar i=0,l=0,j; init1602(); while(key_flag2&&i<12) if(key_scan()){j=key_value();write_data(j);if(i%2==0)data_alarm[l]=(j-'0')10;else {data_alarm[l]+=(j-'0');l++;}i++;delay(600);} write_com(0x01); } uchar according(void) { uchar k; if(data_alarm[0]==adjustedYear&&data_alarm[1]==adjustedMonth&&data_alarm[2]==adjustedDay&&data_alarm[3]==adjustedHour&&data_alarm[4]==adjustedMinute&&data_alarm[5]==adjustedSecond) k=1; else k=0; return k; } void speak(void) {uint i=50; while(i) {speaker=0; delay(1); speaker=1; delay(1); i--; } } void alarm(void) {uint i=10; while(i) { speak(); delay(10); i--; } } /修改时间 *** 作/ void reset(void) { sec_add=0; min_add=0; hou_add=0; day_add=0; mon_add=0; yea_add=0 ; } void adjust(void) { if(key_scan()&&key_flag1) switch(key_value()) {case '0':sec_add++;break; case '1':min_add++;break; case '2':hou_add++;break; case '3':day_add++;break; case '4':mon_add++;break; case '5':yea_add++;break; case 'b':reset();break; default: break; } adjustedSecond+=sec_add; adjustedMinute+=min_add; adjustedHour+=hou_add; adjustedDay+=day_add; adjustedMonth+=mon_add; adjustedYear+=yea_add; if(adjustedSecond>59) adjustedSecond=adjustedSecond%60; if(adjustedMinute>59) adjustedMinute=adjustedMinute%60; if(adjustedHour>23) adjustedHour=adjustedHour%24; if(adjustedDay>31) adjustedDay=adjustedDay%31; if(adjustedMonth>12) adjustedMonth=adjustedMonth%12; if(adjustedYear>100) adjustedYear=adjustedYear%100; } /中断处理函数/ void changing(void) interrupt 0 using 0 //需要修改时间和日期,或者停止修改 { if(key_flag1)key_flag1=0; else key_flag1=1; } void alarming(void) interrupt 3 using 0 //需要设置闹铃或者停止设置 { if(key_flag2)key_flag2=0; else key_flag2=1; } /主函数/ main() {uint i; uchar l; uchar p1[]="D:",p2[]="T:"; SYSTEMTIME T; EA=1; EX0=1; IT0=1; EA=1; EX1=1; IT1=1; init1602(); Initial_DS1302() ; while(1) { write_com(0x80); write_string(p1,2); write_com(0xc0); write_string(p2,2); DS1302_GetTime(&T) ; adjustedSecond=TSecond; adjustedMinute=TMinute; adjustedHour=THour; adjustedWeek=TWeek; adjustedDay=TDay; adjustedMonth=TMonth; adjustedYear=TYear; for(i=0;i<9;i++) { adjustedDateString[i]=TDateString[i]; adjustedTimeString[i]=TTimeString[i]; } adjust(); if(key_flag2)naoling(); if(according())alarm(); DateToStr(&adjusted); TimeToStr(&adjusted); write_com(0x82); write_string(adjustedDateString,8); write_com(0xc2); write_string(adjustedTimeString,8); delay(10); } (二)头文件1 显示模块 LCD1602H #ifndef LCD_CHAR_1602_2009_5_9 #define LCD_CHAR_1602_2009_5_9 #define uchar unsigned char #define uint unsigned int sbit lcdrs = P2^0; sbit lcdrw = P2^1; sbit lcden = P2^2; void delay(uint z) // 延时 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(uchar com) // 写入指令数据到 lcd { lcdrw=0; lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar date) // 写入字符显示数据到 lcd { lcdrw=0; lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init1602() // 初始化设定 { lcdrw=0; lcden=0; write_com(0x3C); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); } void write_string(uchar pp,uint n) { int i; for(i=0;i<n;i++) write_data(pp[i]); } #endif (三)头文件2 时钟模块 DS1302H #ifndef _REAL_TIMER_DS1302_2009_5_20_ #define _REAL_TIMER_DS1302_2003_5_20_ sbit DS1302_CLK = P2^6; //实时时钟时钟线引脚 sbit DS1302_IO = P2^7; //实时时钟数据线引脚 sbit DS1302_RST = P2^5; //实时时钟复位线引脚 sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; typedef struct SYSTEM_TIME { unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString[9]; //用这两个字符串来放置读取的时间 unsigned char TimeString[9]; }SYSTEMTIME; //定义的时间类型 #define AM(X) X #define PM(X) (X+12) // 转成24小时制 #define DS1302_SECOND 0x80 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY 0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C #define DS1302_RAM(X) (0xC0+(X)2) //用于计算 DS1302_RAM 地址的宏 /内部指令/ void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i; ACC = d; for(i=8; i>0; i--) { DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; //因为在前面已经定义了ACC0 = ACC^0;以便再次利用DS1302_IO = ACC0; } } unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--) { ACC = ACC >>1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; } return(ACC); } // void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据 { DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); // 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; } unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据 { unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); } void DS1302_SetProtect(bit flag) //是否写保护 { if(flag) Write1302(0x8E,0x10); else Write1302(0x8E,0x00); } void DS1302_SetTime(unsigned char Address, unsigned char Value) // 设置时间函数 { DS1302_SetProtect(0); Write1302(Address, ((Value/10)<<4 | (Value%10))); //将十进制数转换为BCD码 } //在DS1302中的与日历、时钟相关的寄存器存放的数据必须为BCD码形式 void DS1302_GetTime(SYSTEMTIME Time) { unsigned char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time->Second = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); //将BCD码转换为十进制数 ReadValue = Read1302(DS1302_MINUTE); Time->Minute = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time->Hour = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time->Day = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK); Time->Week = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time->Month = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time->Year = ((ReadValue&0x70)>>4)10 + (ReadValue&0x0F); } unsigned char DataToBCD(SYSTEMTIME Time) { unsigned char D[8]; D[0]=Time->Second/10<<4+Time->Second%10; D[1]=Time->Minute/10<<4+Time->Minute%10; D[2]=Time->Hour/10<<4+Time->Hour%10; D[3]=Time->Day/10<<4+Time->Day%10; D[4]=Time->Month/10<<4+Time->Month%10; D[5]=Time->Week/10<<4+Time->Week%10; D[6]=Time->Year/10<<4+Time->Year%10; return D; } void DateToStr(SYSTEMTIME Time) { //将十进制数转换为液晶显示的ASCII值 Time->DateString[0] = Time->Year/10 + '0'; Time->DateString[1] = Time->Year%10 + '0'; Time->DateString[2] = '-'; Time->DateString[3] = Time->Month/10 + '0'; Time->DateString[4] = Time->Month%10 + '0'; Time->DateString[5] = '-'; Time->DateString[6] = Time->Day/10 + '0'; Time->DateString[7] = Time->Day%10 + '0'; Time->DateString[8] = '\0'; } void TimeToStr(SYSTEMTIME Time) { //将十进制数转换为液晶显示的ASCII值 Time->TimeString[0] = Time->Hour/10 + '0'; Time->TimeString[1] = Time->Hour%10 + '0'; Time->TimeString[2] = ':'; Time->TimeString[3] = Time->Minute/10 + '0'; Time->TimeString[4] = Time->Minute%10 + '0'; Time->TimeString[5] = ':'; Time->TimeString[6] = Time->Second/10 + '0'; Time->TimeString[7] = Time->Second%10 + '0'; Time->DateString[8] = '\0'; } void Initial_DS1302(void) { unsigned char Second; Second=Read1302(DS1302_SECOND); if(Second&0x80) //初始化时间 DS1302_SetTime(DS1302_SECOND,0); } void DS1302_TimeStop(bit flag) // 是否将时钟停止 { unsigned char Data; Data=Read1302(DS1302_SECOND); DS1302_SetProtect(0); if(flag) Write1302(DS1302_SECOND, Data|0x80); else Write1302(DS1302_SECOND, Data&0x7F); } #endifzftzbpujjj1134358763,jaiezwwysu6517560870,2012-2-15 11:08:28

/打点/

void point(uchar x,uchar y)

{

uchar y1,hang,lie,msb_data,lsb_data,temp=0x01;

if(y1!=y)

{

msb_data=0;

lsb_data=0;

}

y1=y;

if(y<32)

{

hang=0x80+y;

lie=0x80;

}

if(y>31)

{

hang=0x80+y-32;

lie=0x88;

}

if(y>63)//return;

{

lcm_com(0x80);

_nop_();

hanzi("温度超出显示范围");

while(1)

flash();

}

lie=lie+x/16;

if(x%16==0)

{

msb_data=0;

lsb_data=0;

}

if(x%16<8)

{

msb_data=msb_data|(temp<<(7-x%16));

lsb_data=0x00|lsb_data;

}//保留以前的数据,把第x个点亮

if(x%16==8)

{

msb_data=msb_data|0x00;

lsb_data=lsb_data|0x80;

}

if(x%16>8) 大于24小于32

{

msb_data=msb_data|0x00;

lsb_data=lsb_data|(temp<<(15-x%16));

}

lcm_com(0x34);//扩充指令集

lcm_com(hang);

lcm_com(lie);

lcm_dat(msb_data);

lcm_dat(lsb_data);

lcm_com(0x36);//绘图显示开

}

1602A液晶屏驱动程序 晶 振 频 率:110592M/#include <reg51h>#define uchar unsigned char#define uint unsigned int sbit LCM_E=P3^5;//定义接口sbit LCM_RW=P3^6;sbit LCM_RS=P3^7; #define LCM_Data P1//数据接口 void LCM_WriteData(uchar WDLCM);void LCM_WriteCommand(uchar WCLCM,BuysC);uchar LCM_ReadData(void);uchar LCM_ReadStatus(void);void LCM_Init(void);void DisplayOneChar(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X, uchar Y, uchar code DData);void Delay5Ms(void);void Delay400Ms(void); uchar code uctech[] = {"1602A"};uchar code net[] = {">

//此程序实现计时秒表功能,时钟显示范围0000~9999 秒,分辨度:001 秒

#include "p18f458h"

unsigned char s[4]; //定义001 秒、01 秒、1 秒、10 秒计时器

unsigned char k,data,sreg;

unsigned int i;

const table[11]={0xc0 ,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};

//不带小数点的显示段码表

const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};

//带小数点的显示段码表

void clkint(void);

//TMR0 初始化子程序

void tmint()

{

T0CON=0XCF; //设定TMR0L 工作于8 位定时器方式

//内部时钟,TMR0不用分频

INTCON=0X20; //总中断禁止,TMR0 中断允许,清除TMR0 的中断标志

INTCON2bitsTMR0IP=1; //TMR0 中断高优先级

RCONbitsIPEN=1; //使能中断优先级

}

//系统其它部分初始化子程序

void initial()

{

TRISA=0x00; //A口设置为输出

TRISB=0XF0; //RB1 输出,RB4 输入

TRISC=0x00; //SDO引脚为输出,SCK 引脚为输出

TRISE=0x00; //E口设置为输出

SSPCON1=0x30; //SSPEN=1;CKP=1,FOSC/4

SSPSTAT=0xC0; //时钟下降沿发送数据

PIR1=0; //清除SSPIF 标志

data=0X00; //待显示的寄存器赋初值

PORTBbitsRB1=0;

PORTAbitsRA3=0;

PORTE=0; //将 K1,K2,K3,K4 四条列线置0

}

//SPI 传输数据子程序

void SPILED(char data)

{

SSPBUF=data; //启动发送

do

{

;

}while(PIR1bitsSSPIF==0);

PIR1bitsSSPIF=0;

}

//显示子程序,显示4 位数

void dispaly()

{

PORTAbitsRA5=0; //准备锁存

for(k=0;k<4;k++)

{

data=s[k];

if(k==2) data=table0[data]; //个位需要显示小数点

else data=table[data];

SPILED(data); //发送显示段码

}

for(k=0;k<4;k++)

{

data=0xFF;

SPILED(data); //连续发送4 个DARK,使显示好看一些

}

PORTAbitsRA5=1; //最后给锁存信号,代表显示任务完成

}

//软件延时子程序

void DELAY()

{

for(i = 3553; --i ;)

continue;

}

//键扫描子程序

void KEYSCAN()

{

while(1)

{

dispaly(); //调用一次显示子程序

while(PORTBbitsRB4==0)

{

DELAY(); //若有键按下,则软件延时

break;

}

if (PORTBbitsRB4==0) break; //若还有键按下,则终止循环扫描,返回

}

}

//等键松开子程序

void keyrelax()

{

while(1)

{

dispaly(); //调用一次显示子程序

if (PORTBbitsRB4==1) break; //为防止按键过于灵敏,每次等键松开才返回

}

}

/ 高优先级中断向量/

#pragmacode InterruptVectorHigh=0x08

void InterruptVectorHigh (void)

{

_asm

goto clkint //跳到中断程序

_endasm

}

//中断服务程序

#pragmacode

#pragma interrupt clkint

void clkint()

{

TMR0=0X13; //对 TMR0写入一个调整值。因为写入TMR0 后接着的

//两个周期不能增量,中断需要3 个周期的响应时间,

//以及C 语言自动进行现场保护要消耗周期

INTCONbitsT0IF=0; //清除中断标志

sreg=sreg+1; //中断计数器加1

if(sreg==40) //中断次数为40 后,才对S0,S1,S2,S3 *** 作

{

sreg=0;

s[0]=s[0]+1;

if(s[0]==10)

{

s[0]=0 ;

s[1]=s[1]+1;

if(s[1]==10)

{

s[1]=0 ;

s[2]=s[2]+1;

if(s[2]==10)

{

s[2]=0;

s[3]=s[3]+1;

if(s[3]==10) s[3]=0;

}

}

}

}

}

//主程序

main()

{

tmint(); //TMR0 初始化

initial(); //spi 显示初始化及系统其它部分初始化

INTCONbitsGIE=0; //总中断禁止

while(1)

{

for(k=0;k<4;k++)

{

s[k]=0;

}

sreg=0; //赋显示初值

dispaly(); //调用一次显示子程序

KEYSCAN(); //键扫描,直到开始键按下

keyrelax(); //等键松开

INTCONbitsGIE=1; //总中断允许

KEYSCAN(); //键扫描直到停止键按下,在键扫描时有显示

keyrelax(); //等键松开

INTCONbitsGIE=0; //总中断禁止

KEYSCAN(); //键扫描到清0 键按下,在键扫描时有显示

keyrelax(); //等键松开

}

}

兴宇合电子

你这个液晶屏不是一般开发板能带有的。大致读了一下:

#include <avr/ioh> #include "boardh" #include "manageh"//调用头文件 #include "scanh" #include "timerh" #include "lcdh"

void sys_init(void);

void bus_reset(void);

int main(void) //主程序

{ uint8_t i = 0; //这里定义了一个计数器,用于指示灯闪烁计时用

sys_init(); //系统初始化,具体程序在下面

int_init(); //又初始化了一个什么东西,先不管

// timer0_init(); //没有用到time0

timer1_init(); //time1初始化,但是就现有程序而言还无法知道计时周期

// timer2_init();

// adc_init();

wdt_disable(); //先禁用看门狗

wdt_enable(WDTO_250MS); //设置看门狗250ms为一周期

wdt_reset(); //复位看门狗

sei(); //禁用中断

// 初始化LCD

lcd_init(); //调用液晶屏初始化程序

while(1) //主程序循环

{ manage(); //应该是处理液晶显示内容用的子程序

if (i & 0x10)

LED_ON(); //0x10个周期后LED闪烁

else

LED_OFF();

i++;

delay_ms(10);

wdt_reset(); //复位看门狗

}

}

// 系统初始化

void sys_init(void) //系统初始化子程序的详细内容(看来只定义了IO口还真不知道这个系统内单片机的定时器如何初始化的)

{

PORTA = 0xf2; //定义IO口

DDRA = 0; // PA7~PA4 键盘输入,PA3: LCD_A0复用电池测量时,输出1

// PA2: 输入,测电池电压, PA1:LCD_CS, PA0:输入,测总线电压?

PORTB = 0xff;

DDRB = 0x00; // PB输出,LCD_DB,PB0~PB4 KEY SCAN

PORTC = 0x80;

DDRC = 0xc0; // PC输出,PC7:LCD_RST,PC6:LCD_LED+,

PORTD = 0x03;

DDRD = 0xf3; // PD7:PWM,PD6:ZL,PD5:ZH,PD4:LED

// PD3返回,PD2开关, PD1:LCD_RD, PD0:LCD_WR

}

void lcd_init(void) //LCD的初始化

{

uint8_t i;

LCD_RST_L(); //应该是复位LCD

delay_ms(2); //延时

LCD_RST_H(); //复位完毕,该复位引脚拉高

for (i=0; i<8; i++) //复位8次看门狗?

{

delay_ms(20);

wdt_reset();

}

write_cmd(0xe2);//system reset 24 //写一个复位命令?

delay_ms(10);

write_cmd(0xeb);//set bias RATIO=1/12 27 =E8 FOR LOW POWER //设置液晶屏偏压

write_cmd(0x81);//set refence voltage ;pm 11 DOUBLE command //设置参考电压

write_cmd(0x83);//set RGB D1 21 //设置RGB方式?

write_cmd(0x2f);//set color mode,65K 22 D4 FOR 256 COLOR 3r-3g-2b//设置彩色显示深度

write_cmd(0x2b);//set line rate,358kps 15 A3//设置啥?不是很明白

write_cmd(0x24);//set n-line 5,TempCompensation 00//设置某种补偿?

write_cmd(0xa2); // 15 set line rate 296k

write_cmd(0xd0);//set partial display 21 D0 BGR//设置一个副屏幕?或许这个彩屏还附带一个小屏幕?

write_cmd(0xd6);//set cen 22 d6 64k color 5-6-5//不明白

write_cmd(0xc0); // 19 LC[2:0]

write_cmd(0xaf); //set display on 18, DC[4:2]=111//仍然不明白

delay_ms(10);

wdt_reset();//重启看门狗

}

void write_cmd(uint8_t cmd)//“写命令”子程序

{

LCD_A0_L();//应该是拉低“命令\数据”引脚的电平

LCD_CS_L(); //片选引脚

PORTB = cmd; //PORTB的8个引脚作为并行口向液晶屏输出数据

DDRB = 0xff; //PORTB的方向定义为输出

LCD_WR_L(); //写LCD引脚电平拉低,看来这程序可能是为了防止被中断或者别的情况打乱,特地发送了两遍

LCD_WR_L();

LCD_WR_H();

LCD_CS_H();

DDRB = 0; //改PORTB为高阻态

//个人觉得后面应该还需要两个语句:LCD_CS_H();和LCD_A0_H();已完成一个“写命令”周期

}

总之,你这块液晶屏应该在市场上不常见。要用这个玩意,你必须有对应这块液晶屏的详细文档、数据手册,否则光这么一个程序很难把这个液晶屏玩转了。

以上就是关于液晶电视怎样写程序全部的内容,包括:液晶电视怎样写程序、关于单片机液晶1602的程序片段问题、跪求:液晶LCD1602显示时钟的C程序!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10123656.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存