光看代码你是不能了解它的使用历程的,最好看看使用手册,下面的代码是用1602液晶
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="看你选择用哪种方式刷程序,可以用USB接口,25针并口,U盘等,像你说的V29我们通常用U盘写(如果板上没USB接口就用自制的转接口(一端插U盘一端连接在板上,也就是4针的通常为兰色的接口。不要说找不到哦,板上4针的接口不多且还标明了的)写)按照你这屏的的型号先拷个M190A1程序到U盘,先插上U盘,再给板供电,当显示灯红绿交替闪烁时就说明正在写程序,当显示灯闪烁的频率加快了时就已经写好了,此时先断电,再拔U盘,之后就可以全部连上看图像对不对了(要连信号线,看有无干扰,非灯管原因引起的图像抖动,分辨率对不对等)。
至此,在写完程序后全部连接上时是要将驱动板、驱屏线、升压板、灯管线及按键上的显示灯(按键可以不要,但显示的状态灯一定要要)连接好(不要把屏线插错了),将板上电压跳到5V,要跳5V哦。
注意,刷好程序连接了全套的东西时在通电瞬间准备好拔电,防止因屏内的短路或因插屏线没插好引起的短路(甚至拿屏线时不小心的粗心大意拿成了反双八的屏线了)乐华板的好处就在这里,特别是PC板在通电很短的短时间内如果显示灯颜色不正常立即断电是绝大多数情况下可以避免烧板或烧屏的
i_data&=0xf0; // i_data=i_data&0xf0; 高位字节与上1则不变,低四位则被清零 ,因为该12864为串行方式写入,一次需写入8个bit,故采用循环结构比较好 *** 作,建议多看DATASHEET以及C语言相关
戴尔笔记本电脑配备内置诊断工具,可用于确定屏幕异常是戴尔笔记本电脑液晶屏幕的固有问题,还是显卡 (GPU) 和计算机设置的问题。
当您注意到闪烁、失真、不清晰、图像模糊、出现横线或竖线、颜色暗淡等屏幕异常时,您可以通过运行内置自检 (BIST) 来逐一排除显示器。
方法1
关闭戴尔笔记本电脑。
断开所有与电脑相连的外围设备,然后将交流适配器(充电器)连接到该电脑。
确保液晶屏清洁(屏幕表面没有灰尘颗粒)。
按住D键并打开电脑电源,进入液晶屏内置自检(BIST)模式。
继续按住D键,直至看到整个屏幕改变颜色。
屏幕颜色将变为黑色、白色、红色、绿色和蓝色。
仔细检查屏幕是否有异常。
按Esc键退出。
方法2
关闭戴尔笔记本电脑。
断开所有与电脑相连的外围设备,然后将交流适配器(充电器)连接到该电脑。
确保液晶屏清洁(屏幕表面没有灰尘颗粒)。
按住Fn键并打开电脑电源,进入ePSA或PSA诊断程序模式。
继续按住Fn键,直至看到ePSA或PSA诊断程序屏幕。
ePSA 或 PSA 将在电脑上运行一系列检测。
当看到消息“Do you see the color bars Yes/No”(您是否看到色条?是/否)后,按N键进入液晶屏内置自检模式是/否。”
注:如果30秒内未作出响应,诊断程序将自动假定您的响应为“No”(否),然后进行液晶屏内置自检。
屏幕将显示多个色条,整个屏幕上的颜色会变为黑色、白色、红色、绿色和蓝色。
仔细检查屏幕是否有异常。
余下的检测完成后,计算机将重新启动。如果未在内置自检(BIST)模式下检测到任何屏幕异常,则表示笔记本电脑液晶屏功能正常。继续执行下一步,更新显卡(GPU)驱动程序、显示器驱动程序和BIOS。
如果您在内置自检模式下发现任何异常,请联系戴尔技术支持以获得进一步的帮助。
纯手工打磨,拷到c++里就能用。2005测试通过
=================程序开始=================
#include <iostream>
#include <iomanip>
#include <mathh>
using namespace std;
//0的ASCII码
#define NUM_START 48
//输入数字的最大位数
#define MAX_NUM 20
//最大行数
#define MAX_LINE 8
//输出的所有字符数
#define ALL_SYMBO 12
//最大行数
#define MAX_ROW 8
//每行显示的最大LED字数
#define MAX_LROW 9
//最大 *** 作数
#define MAX_OPT 100
// *** 作符个数
#define ALL_OPTS 6
/ *** 作符/
#define OPTS_POS ALL_OPTS + 3
#define SOPTS_POS ALL_OPTS + 2
#define NOPTS_POS ALL_OPTS + 1
#define OPT_ADD 0
#define OPT_REDUCE 1
#define OPT_MULTIP 2
#define OPT_DIVISION 3
char Opts[ALL_OPTS]={'+','-','','/','(',')'};
/译码表/
int Code[ALL_SYMBO+1][MAX_LINE]=
{
{1,1,1,1,1,1,0}, //0
{0,0,1,1,0,0,0}, //1
{0,1,1,0,1,1,1}, //2
{0,1,1,1,1,0,1}, //3
{1,0,1,0,0,1,1}, //4
{1,1,0,1,1,0,1}, //5
{1,1,0,1,1,1,1}, //6
{0,1,1,1,0,0,0}, //7
{1,1,1,1,1,1,1}, //8
{1,1,1,1,1,0,1}, //9
{0,0,0,0,0,0,0}, //
{0,0,0,0,0,0,1}, //-
};
/计算/
float Calc();
void OptCalc(int _opt);
/标准化/
int Fliter(char _input,int _size);
/字符串转化为数字/
float Char2Num(char _c,int _size);
/数字转换成字符串/
char Num2Char(int _int);
char Num2Char(float _flt,int prc = 3);
/字符串转化为编码/
int Char2Code(char _c,int size,int code);
/输入并打印LED数字/
void PrintLEDNum(int _show);
void PrintLEDNum(float _show);
/打印LED数字/
void Print(int _rg,int _cd,int _r=0);
/ *** 作数和每种 *** 作数的个数/
int opts[ALL_OPTS + 4];
char opt[MAX_OPT][MAX_NUM];
void main()
{
float a=00;
cin>>a;
PrintLEDNum(a);
return;
}
float Calc()
{
float res=00f;
OptCalc(OPT_MULTIP);
OptCalc(OPT_DIVISION);
OptCalc(OPT_ADD);
OptCalc(OPT_REDUCE);
return Char2Num(opt[0],strlen(opt[0]));
}
void OptCalc(int _opt)
{
for(int i=0;i<opts[_opt];i++)
{
for(int j=0; j<opts[OPTS_POS];j++)
{
if(opt[j][0]==Opts[_opt])
{
float left = Char2Num(opt[j-1],strlen(opt[j-1]));
float right = Char2Num(opt[j+1],strlen(opt[j+1]));
float t=0;
switch(_opt)
{
case OPT_ADD:
t=left+right;
break;
case OPT_REDUCE:
t=left-right;
break;
case OPT_MULTIP:
t=leftright;
break;
case OPT_DIVISION:
t=left/right;
break;
}
strcpy(opt[j-1],Num2Char(t));
for(int k=j-1;k<opts[OPTS_POS]-1;k+=2)
{
strcpy(opt[k+1],opt[k+3]);
strcpy(opt[k+2],opt[k+4]);
}
for(int k=0;k<MAX_NUM;k++)
{
opt[opts[OPTS_POS]][k]='\0';
opt[opts[OPTS_POS]-1][k]='\0';
}
opts[SOPTS_POS]-=1;
opts[NOPTS_POS]-=1;
opts[OPTS_POS]-=2;
//opts[_opt]--;
break;
}
}
}
return;
}
int Fliter(char _input,int _size)
{
int res=0;
for(int i=0;i<MAX_OPT;i++)
{
for(int j=0;j<MAX_NUM;j++)
{
opt[i][j]='\0';
}
}
for(int i=0;i<_size;i++) //删除空格
{
if(_input[i]==' ')
{
for(int j=i;j<_size-1;j++)
{
_input[j]=_input[j+1];
}
_size-=1;
}
for(int j=0;j<ALL_OPTS;j++)
{
if(_input[i]==Opts[j])
{
opts[j]++;
res++;
}
}
}
if(opts!=0)
{
int l=0;
int iOldOpt = -1;
int curOpt = 0;
for(int i=0;i<_size;i++)
{
for(int j=0;j<ALL_OPTS;j++)
{
if(_input[i]==Opts[j])
{
curOpt++;
for(int k=iOldOpt+1;k<i;k++)
{
opt[l][k-iOldOpt-1] = _input[k];
}
l++;
iOldOpt = i;
opt[l][0] = _input[i];
l++;
opts[OPTS_POS]++;
opts[SOPTS_POS]++;
if(i!=0)
{
opts[OPTS_POS]++;
}
if(curOpt==res)
{
for(int k=i+1;k<_size;k++)
{
opt[l][k-iOldOpt-1] = _input[k];
}
l++;
opts[OPTS_POS]++;
}
}
}
}
}
else
{
strcpy(opt[0],_input);
}
opts[NOPTS_POS]=opts[OPTS_POS]-opts[SOPTS_POS];
return res;
}
float Char2Num(char _c,int _size)
{
char tc[MAX_NUM];
for(int i=0;i<MAX_NUM;i++)
{
tc[i]='\0';
}
float res = 00f;
int point = 0;
int pob = 0; //正负判断
if(_c[0]=='-')
{
pob = -1;
_c++;
strcpy(tc,_c);
}
else
{
strcpy(tc,_c);
}
for(int i=0;i<_size;i++)
{
if(tc[i]=='')
{
point = i;
break;
}
}
if(point!=0)
{
for(int i=0;i<point;i++)
{
int itp=tc[i]-NUM_START;
res+=itppow((double)10,point-i-1);
}
for(int i= point+1;i<_size;i++)
{
int itp=tc[i]-NUM_START;
res+=itppow((double)10,point-i);
}
}
else
{
for(int i= 0;i<_size;i++)
{
int itp=tc[i]-NUM_START;
res+=itppow((double)10,_size-i-1);
}
}
if(pob==-1)
{
return -1res;
}
else
{
return res;
}
}
char Num2Char(int _int)
{
char res[MAX_NUM-1];
bool notzero=false;
for(int i=0;i<MAX_NUM-1;i++)
{
res[i]='\0';
}
if(_int ==0)
{
res[0]='0';
}
if(_int>0)
{
int j=0;
for(int i=MAX_NUM-2;i>=0;i--)
{
int t=_int/pow((double)10,i);
if((int)(_int/pow((double)10,i))!=0)
{
notzero=true;
}
if(notzero)
{
int t=_int/pow((double)10,i);
res[j] = (int)(_int/pow((double)10,i)) + NUM_START;
_int -= (int)(_int/pow((double)10,i))pow((double)10,i);
j++;
}
}
}
else if(_int < 0)
{
_int=abs(_int);
int j=1;
for(int i=MAX_NUM-2;i>=0;i--)
{
int t=_int/pow((double)10,i);
if((int)(_int/pow((double)10,i))!=0)
{
notzero=true;
}
if(notzero)
{
int t=_int/pow((double)10,i);
res[j] = (int)(_int/pow((double)10,i)) + NUM_START;
_int -= (int)(_int/pow((double)10,i))pow((double)10,i);
j++;
}
}
res[0]='-';
}
return res;
}
char Num2Char(float _flt,int prc)
{
char res=new char[MAX_NUM];
bool mdi = false; //如果该数在1与-1之间
for(int i=0;i<MAX_NUM;i++)
{
res[i]='\0';
}
if(_flt<10&&_flt>-10)
{
mdi = true;
}
_flt=pow((double)10,prc);
int toint=(int)_flt;
strcpy(res,Num2Char(toint));
int j=0;
for(int i=strlen(res)-1;i>=0;i--)
{
res[i+1]=res[i];
j++;
if(j==prc)
{
res[i]='';
break;
}
}
j=0;
if(mdi==true)
{
for(int i=strlen(res)-1;i>=0;i--)
{
res[i+1]=res[i];
j++;
if(j==prc+1)
{
res[i]='0';
break;
}
}
}
return res;
}
void PrintLEDNum(int _show)
{
char prt[MAX_NUM];
int code[MAX_NUM];
strcpy(prt,Num2Char(_show));
int rang = strlen(prt);
Char2Code(prt,rang,code);
int row=rang/MAX_LROW;
int i=0;
for(i=0;i<row;i++)
{
Print(MAX_LROW,code,i);
cout<<endl;
}
if(rang%MAX_LROW!=0)
{
Print(rang%MAX_LROW,code,row);
cout<<endl;
}
//Print(rang%MAX_LROW,code,iMAX_LROW);
/
for(int j=0;j<rang;j++)
{
int a=Code[code[j]][1];
if(Code[code[j]][1])
{
cout<<setw(8)<<"-- ";
}
else
{
cout<<setw(8)<<" ";
}
}
cout<<endl;
for(int i=0;i<2;i++)
{
for(int j=0;j<rang;j++)
{
if(Code[code[j]][0])
{
cout<<setw(4)<<"| ";
}
else
{
cout<<setw(4)<<" ";
}
if(Code[code[j]][2])
{
cout<<setw(4)<<"| ";
}
else
{
cout<<setw(4)<<" ";
}
}
cout<<endl;
}
for(int j=0;j<rang;j++)
{
if(Code[code[j]][6])
{
cout<<setw(8)<<"-- ";
}
else
{
cout<<setw(8)<<" ";
}
}
cout<<endl;
for(int i=0;i<2;i++)
{
for(int j=0;j<rang;j++)
{
if(Code[code[j]][5])
{
cout<<setw(4)<<"| ";
}
else
{
cout<<setw(4)<<" ";
}
if(Code[code[j]][3])
{
cout<<setw(4)<<"| ";
}
else
{
cout<<setw(4)<<" ";
}
}
cout<<endl;
}
for(int j=0;j<rang;j++)
{
if(Code[code[j]][4])
{
cout<<setw(8)<<"-- ";
}
else
{
cout<<setw(8)<<" ";
}
}
cout<<endl;
/
}
void PrintLEDNum(float _show)
{
char prt[MAX_NUM];
int code[MAX_NUM];
strcpy(prt,Num2Char(_show));
int rang = strlen(prt);
Char2Code(prt,rang,code);
int row=rang/MAX_LROW;
int i=0;
for(i=0;i<row;i++)
{
Print(MAX_LROW,code,i);
cout<<endl;
}
if(rang%MAX_LROW!=0)
{
Print(rang%MAX_LROW,code,row);
cout<<endl;
}
}
int Char2Code(char _c,int size,int code)
{
int len=0;
for(int i=0;i<MAX_NUM;i++)
{
code[i]=-1;
}
for(int i=0;i<size;i++)
{
if(_c[i]>=NUM_START && _c[i]<NUM_START+10)
{
code[i]=_c[i]-NUM_START;
}
else if(_c[i]=='')
{
code[i]=10;
}
else if(_c[i]=='-')
{
code[i]=11;
}
}
return 1;
}
void Print(int _rg,int _cd,int _r)
{
int dist=8;
for(int j=0;j<_rg;j++)
{
if(Code[_cd[j+MAX_LROW_r]][1])
{
cout<<setw(dist)<<"-- ";
}
else
{
cout<<setw(dist)<<" ";
}
}
cout<<endl;
for(int i=0;i<2;i++)
{
for(int j=0;j<_rg;j++)
{
if(Code[_cd[j+MAX_LROW_r]][0])
{
cout<<setw(dist/2)<<"| ";
}
else
{
cout<<setw(dist/2)<<" ";
}
if(Code[_cd[j+MAX_LROW_r]][2])
{
cout<<setw(4)<<"| ";
}
else
{
cout<<setw(4)<<" ";
}
}
cout<<endl;
}
for(int j=0;j<_rg;j++)
{
if(Code[_cd[j+MAX_LROW_r]][6])
{
cout<<setw(dist)<<"-- ";
}
else
{
cout<<setw(dist)<<" ";
}
}
cout<<endl;
for(int i=0;i<2;i++)
{
for(int j=0;j<_rg;j++)
{
if(Code[_cd[j+MAX_LROW_r]][5])
{
cout<<setw(dist/2)<<"| ";
}
else
{
cout<<setw(dist/2)<<" ";
}
if(Code[_cd[j+MAX_LROW_r]][3])
{
cout<<setw(dist/2)<<"| ";
}
else
{
cout<<setw(dist/2)<<" ";
}
}
cout<<endl;
}
for(int j=0;j<_rg;j++)
{
if(_cd[j+MAX_LROW_r]==10)
{
coutsetf (ios::left);
cout<<setw(dist)<<"。";
coutsetf (ios::right);
}
else if(Code[_cd[j+MAX_LROW_r]][4])
{
cout<<setw(dist)<<"-- ";
}
else
{
cout<<setw(dist)<<" ";
}
}
cout<<endl;
}
以上就是关于最简单c51单片机液晶显示程序全部的内容,包括:最简单c51单片机液晶显示程序、液晶电视万能驱动板怎么写程序、51单片机 12232液晶屏的 *** 作程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)