12864液晶屏资料坏了能否直接更换

网易博客网站关停、迁移的公告:
将从日00:00起正式停止网易博客运营
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
#include &reg51.h&#include &intrins.h&#define uchar unsigned char#define uint& unsigned int#define LCD_data& P0&&&&&& //数据口sbit LCD_RS& =& P2^0;&&&&& //寄存器选择输入 sbit LCD_RW& =& P2^1;&&&&& //液晶读/写控制sbit LCD_EN& =& P2^2;&&&&& //液晶使能控制sbit LCD_PSB =& P2^3;&&&&& //串/并方式控制sbit LCD_RST =& P2^5;&&&&& //液晶复位端口uchar code& DIS1[] = {"朝辞白帝彩云间,"};uchar code& DIS2[] = {"千里江陵一日还,"};uchar code& DIS3[] = {"两岸猿声啼不住,"};uchar code& DIS4[] = {"轻舟已飞万重山。"};void delay(int ms){&&& while(ms--)&{&&&&&&& for(i=0;i&250;i++)& &&& {&&&& _nop_();&&&&& &&_nop_();&&_nop_();&&_nop_();&&& }&}}&&&& void lcd_wcmd(uchar cmd){&&&&&&&&&&&&&&&&&&&&&&&&& &&& LCD_RS = 0;&&& LCD_RW = 0;&&& LCD_EN = 1; &delay(5);&&& LCD_data=&delay(5);&&& LCD_EN = 0;& }void lcd_wdat(uchar dat){&&&&&&&&&&&&&&&&&&&&&&&&& && &&& LCD_RS=1;&&& LCD_RW=0;&LCD_EN=1;&delay(5);&&& P0=&delay(5);&&& LCD_EN = 0; }void lcd_init(){ &&& LCD_PSB=1;&&&&&&&& //并口方式&&& LCD_EN=0;&&& LCD_RST=0;&&& delay(5);&& LCD_RST=1;&&& lcd_wcmd(0x34);&&&&& //扩充指令操作&&& delay(5);&&& lcd_wcmd(0x30);&&&&& //基本指令操作&&& delay(5);&& lcd_wcmd(0x01);&&&&& //清除LCD的显示内容&&& delay(5);&&& lcd_wcmd(0x0c);&&&&& //显示开,关光标&&& delay(5);&lcd_wcmd(0x06);&&&&& &&& delay(5);&&& }/*********************************************************//*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *//* 设定显示位置&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *//*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *//*********************************************************/void lcd_pos(uchar X,uchar Y){&&&&&&&&&&&&&&&&&&&&&&&&& &&&& if (X==1)&&&& {X=0x80;}&& else if (X==2)&&&& {X=0x90;}&& else if (X==3)&&&& {X=0x88;}&& else if (X==4)&&&& {X=0x98;}&& pos=X+Y ; && lcd_wcmd(pos);&&&& //显示地址}void main(){&&&& delay(100);&&&&&&&&&&&&&&&& //上电,等待稳定&& lcd_init();&&&&&&&&&&&&&&&& //初始化LCD&& &while(1)&{&&&& lcd_pos(1,0);&&&&&&&&&&&& //设置显示位置为第一行&&&& for(i=0;i&16;i++)&&&& {&&&&&& lcd_wdat(DIS1[i]);&&&&&& delay(30);&&&& }& delay(50);&&&& lcd_pos(2,0);&&&&&&&&&&&& //设置显示位置为第二行&&&& for(i=0;i&16;i++)&&&& {&&&&&& lcd_wdat(DIS2[i]);&&&&&& delay(30);&&&& }& delay(5);&&&& lcd_pos(3,0);&&&&&&&&&&&& //设置显示位置为第三行&&&& for(i=0;i&16;i++)&&&& {&&&&&& lcd_wdat(DIS3[i]);&&&&&& delay(30);&&&& }&delay(50);&&&& lcd_pos(4,0);&&&&&&&&&&&& //设置显示位置为第四行&&&& for(i=0;i&16;i++)&&&& {&&&&&& lcd_wdat(DIS4[i]);&&&&&& delay(30);&&&& }&&&& delay(1000);&& }}
阅读(19053)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094066',
blogTitle:'12864LCD液晶显示屏(ST7920)——C语言程序',
blogAbstract:'\r\n#include &reg51.h&#include &intrins.h&#define uchar unsigned char#define uint& unsigned int#define LCD_data& P0&&&&&& //数据口sbit LCD_RS& =& P2^0;&&&&& //寄存器选择输入 sbit LCD_RW& =& P2^1;&&&&& //液晶读/写控制sbit LCD_EN& =& P2^2;&&&&& //液晶使能控制sbit LCD_PSB =& P2^3;&&&&& //串/并方式控制',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:9,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}今天时手贱,把12864LCD前面液晶屏拆开了,然后再装上去发现,很多显示点不亮了,能修复么,急_百度知道
今天时手贱,把12864LCD前面液晶屏拆开了,然后再装上去发现,很多显示点不亮了,能修复么,急
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:1863
获赞数:4748
恢复时候,液晶屏幕的上的线(是不太容易看到的)要对正线路板上对应的触点,导电胶条(就是液晶屏幕上下2条长条)压上去时候接触面不能有脏东西,螺丝上紧时压力均匀。祝你好运~~~~~
中文字库对不上了,显示不了中文字了
那你仔细看一下连接线,杜邦线,线路焊点等。如果你把电路板或者上面的元件破坏了,就麻烦了。
元件没损坏,主要是液晶屏排线对不上了,预置的中文字库显示出来就乱码了
这个,仔细对正吧。
商贸班的猥琐哥
商贸班的猥琐哥
擅长:暂未定制
电路板给你拆坏了吧,送回厂家修吧,只要没有用蛮力破坏,应该可以修复
返厂看看吧,一般保修期间不给修,出了保修他就能修了,因为要给钱
谢丽娟123abc
谢丽娟123abc
擅长:暂未定制
我估计修不了,节哀顺变吧看了图之后,我明白了,能修,要看你在哪买的
在哪买的,商店还是网购还是地摊还是水货
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求助:12864液晶屏只有背光不能显示|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
各位大侠,本人初学单片机,先购买了一块单片机开发板,后来又在别处买了一块12864的液晶屏,现在把液晶屏按照正确方法连接上了开发板,也下载了程序,但是液晶屏没有任何字符显示,请问如何才能让液晶屏显示出来?或者说液晶屏是坏的?先上个图吧[attachment=2200962]
赞助商链接
先确保程序是正常的,再找一下此屏的资料,看是否你的程序不能在上面运行
赞助商链接
屏的接口和学习机对口不。同样新手买的屏还在路上。
液晶屏的接口和实验板的接口对不对,程序有无问题,调节对比度看看,液晶旁边的那个电位器好像是,你调下看看,或者你拿到别的板子上试试,有字库的屏和无字库的屏,接口定义不一样,驱动芯片也不一样,要按芯片型号写程序,切记切记
我这个屏幕是带字库的,接口是GND VCC V0 RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 PSB NC RST VOUT BLA BLK 。开发板的接口是GND VCC VO D/I R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 CS1 CS2 RST VEE LED+ LED-。显示屏背面有调节对比度的,是ST7920的芯片。新手只想测试屏幕点亮,后面再学其它的,确认是好的再说。请大侠帮忙写个简单的驱动。
慢慢来,别急,总会成功的,看不清也道不明,只能友情支持了。
看看对比度是不是调到最低了?
上个屏的&&背面的&&高清 无码 大图&&&&帮忙分析一下
接口对不上啊........................
12864不会那么容易坏的,上次买的4块钱12864一开始我也一片也没点亮,坛友给了程序,我还是没点亮,后来才找到是自己的原因。建议可以找多几个ST7920的驱动程序还有数据手册对照着看,慢慢的你就有点眉目了!
高清图来了[attachment=2203099][attachment=2203099]
现在重新连接之后液晶屏亮了,但是是乱码的,下载了几个程序也一样。
你的程序要根据学习板中单片机IO口与屏的引脚定义设置正确才能正常显示。
现在重新连接后能显示一些东西,但是乱码的了,v0接到5V才能显示,但是乱码的。
1.是串行通信还是并行通信?2.如果是并行通信,RS、RW、EN、PSB 定义正确了没有?数据口DB0--DB7定义正确了没有?建议先看看液晶屏的数据手册
现在已经能正确显示了,可是液晶屏有的像素无法点亮,不知道是不是显示屏坏的。调节对比度无效。要么没字,要么全白。唉
查看完整版本: [--
Powered by
Time 0.058332 second(s),query:5 Gzip enabled 上传我的文档
 上传文档
 下载
 收藏
粉丝量:15
该文档贡献者很忙,什么也没留下。
 下载此文档
12864液晶显示器详细解读
下载积分:3000
内容提示:12864液晶显示器详细解读
文档格式:PDF|
浏览次数:450|
上传日期: 13:06:54|
文档星级:
全文阅读已结束,如果下载本文需要使用
 3000 积分
下载此文档
该用户还上传了这些文档
12864液晶显示器详细解读
关注微信公众号查看: 10412|回复: 13
12864液晶显示图片,画点,画任意直线
12864液晶更高级的用法。
首先是它的绘图功能。
让我们先来显示一整副的图片吧,也就是128x64大小。
在使用绘图功能时,先要打开扩充指令集,然后再打开绘图功能。接着就是送数据显示了。这里我们首先要弄明白ST7920的显示坐标关系。其显示坐标如下。
从图中可以看出,X方向共有8个字(16个字节)Y方向共有0~31 行 分为上下两个屏。
弄懂了之后我们就可以依照此坐标来显示一整屏的图片了。
随便用一个图片的提取转换软件,讲一副126X64大小的图片转换成字节数据,总共字节大小为128*64/8 = 1024个字节。下面我们来看看这个显示整屏图像的函数
void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
& & unsigned char i, j,
& & for( i = 0 ; i & 2 ; i++ )//分上下两屏写
& && &&&for( j = 0 ; j & 32 ; j++ )
& && && && &v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标
& && && && &if( i == 0 )& && && && && && &&&//写X坐标
& && && && &{
& && && && && & v_Lcd12864SendCmd_f( 0x80 ) ;
& && && && &}
& && && && &else
& && && && &{
& && && && && & v_Lcd12864SendCmd_f( 0x88 ) ;
& && && && &}
& && && && &for( k = 0 ; k & 16 ; k++ )& && &//写一整行数据
& && && && &{
& && && && && & v_Lcd12864SendData_f( *pPicture++ ) ;
& && && && &}
& & v_Lcd12864SendCmd_f( 0x30 ) ;
}看看效果图片如下:显示一个人的图像
下面来看看如何在任意一个位置显示或者是擦除一个点对于12864这种二值显示屏来说,其显示状态无外乎显示和不显示一个点这两种状态。而在任意位置画点,是我们随心所欲的画线,画圆,画矩形的等GUI函数的基础。
为了让这个位置有一个参考点,我们有必要定义一个坐标系
在这里,我定义的坐标系如下
0,0------------------------------------127,0
|& && && && && && && && && && && && && && && && && && && & |
|& && && && && && && && && && && && && && && && && && && & |
|& && && && && && && && && && && && && && && && && && && & |
|& && && && && && && && && && && && && && && && && && && & |
0,63----------------------------------127,630,0代表屏幕的左上角,127,63代表屏幕的右下角。
对于屏幕上面任意一个点,如果我们想要点亮它,必须先读出此点的状态,然后再修改该点,最后送出去,即 读----修改----写。按照这个步骤,然后再运用C语言中的位操作运算符 可以很方便的完成画点的函数。
由于画点函数涉及到读ST7920内部RAM的操作,因此,我们必须先要完成这个读数据的函数
具体实现过程如下:
unsigned char u8_Lcd12864ReadByte_f( void )
& & unsigned char byReturnV
& & v_Lcd12864CheckBusy_f() ;
& & io_LCD12864_DATAPORT = 0
& & SET_DATA
& & SET_READ
& & CLR_EN
& & SET_EN
& & byReturnValue = io_LCD12864_DATAPORT ;
& & CLR_EN& & return byReturnV& &
}然后是画点的函数,其实现过程如下:void v_Lcd12864DrawPoint_f( unsigned char X, unsigned char Y, unsigned char Color )
& & unsigned char Row , Tier , Tier_bit& & ;
& & unsigned char ReadOldH, ReadOldL ;
& & v_Lcd12864SendCmd_f( 0x34 ) ;
& & v_Lcd12864SendCmd_f( 0x36 ) ;
& & Tier = X && 4 ;& &
& & Tier_bit = X & 0x0
& & if( Y & 32 )
& && &&&Row = Y ;
& && &&&Row = Y - 32 ;
& && &&&Tier += 8 ;
& & v_Lcd12864SendCmd_f( Row + 0x80 ) ;
& & v_Lcd12864SendCmd_f( Tier + 0x80 ) ;
& & u8_Lcd12864ReadByte_f() ;
& & ReadOldH = u8_Lcd12864ReadByte_f() ;
& & ReadOldL = u8_Lcd12864ReadByte_f() ;
& & v_Lcd12864SendCmd_f( Row + 0x80 )& & ;
& & v_Lcd12864SendCmd_f( Tier + 0x80 ) ;
& & if( Tier_bit & 8 )
& && &&&switch( Color)
& && && && &case 0 : ReadOldH &=( ~( 0x01 && ( 7 - Tier_bit ))) ;
& && && && &case 1 : ReadOldH |= ( 0x01 && ( 7 - Tier_bit )) ;
& && && && &case 2 : ReadOldH ^= ( 0x01 && ( 7 - Tier_bit ))& & ;
& && && && &default :& &
& && &&&v_Lcd12864SendData_f( ReadOldH ) ;
& && &&&v_Lcd12864SendData_f( ReadOldL ) ;
& && &&&switch(Color)
& && && && &case 0 : ReadOldL &= (~( 0x01 && ( 15 - Tier_bit ))) ;
& && && && &case 1 : ReadOldL |= ( 0x01 && ( 15 - Tier_bit ))& & ;
& && && && &case 2 : ReadOldL ^= ( 0x01 && ( 15 - Tier_bit )) ;
& && && && &default :
& && &&&v_Lcd12864SendData_f( ReadOldH ) ;
& && &&&v_Lcd12864SendData_f( ReadOldL ) ;
& & v_Lcd12864SendCmd_f( 0x30 )& & ;
}有了画点的函数之后,一切似乎都变得简单了,因为点是一切复杂图形的最基本的组成单位。
下面我们就在这个画点函数的基础上,实现画水平线和垂直线的两个函数。
画水平线:
void v_Lcd12864DrawLineX_f( unsigned char X0, unsigned char X1, unsigned char Y, unsigned char Color )
{& & unsigned char T
& & if( X0 & X1 )
& && &&&Temp = X1 ;
& && &&&X1 = X0 ;
& && &&&X0 = T
& & for( ; X0 &= X1 ; X0++ )
& & v_Lcd12864DrawPoint_f( X0, Y, Color ) ;& &
画垂直线:
void v_Lcd12864DrawLineY_f( unsigned char X, unsigned char Y0, unsigned char Y1, unsigned char Color )
& & unsigned char T
& & if( Y0 & Y1 )
& && &&&Temp = Y1 ;
& && &&&Y1 = Y0 ;
& && &&&Y0 = T
& & for(; Y0 &= Y1 ; Y0++)
& & v_Lcd12864DrawPoint_f( X, Y0, Color)& & ;
}下面我们就用以上两个画线函数,在液晶屏上面画一个表格出来
v_Lcd12864DrawLineX_f( 0, 127 , 0, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 7, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 15, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 23, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 31, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 39, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 47, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 55, 1 ) ;
v_Lcd12864DrawLineX_f( 0, 127 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 0, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 15, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 31, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 47, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 63, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 79, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 95, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 111, 0 , 63, 1 ) ;
v_Lcd12864DrawLineY_f( 127, 0 , 63, 1 ) ;看看显示效果
怎么样,你的实现了吗?
只能画水平线和垂直线似乎太简单和单调点了。
要是能在任意两点间画一条直线就好了,那样我们就可以做很多事情了。
下面就让我们去实现它!
在这里我们采用Bresenham画线算法,关于这个算法,网上有很多资料,请大家以它为关键字到网上去搜索,在这里就不啰嗦了。
下面是算法的具体实现过程:
void v_Lcd12864DrawLine_f( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY, unsigned char Color )
& & int t,& && &/*根据屏幕大小改变变量类型(如改为int型)*/
& & int x = 0 , y = 0 , delta_x, delta_
& & char incx,& & delta_x = EndX - StartX ;
& & delta_y = EndY - StartY ;& & if( delta_x & 0 )
& && &&&incx = 1;
& & else if( delta_x == 0 )
& && &&&v_Lcd12864DrawLineY_f( StartX, StartY, EndY, Color ) ;
& && &&&incx = -1 ;
& & if( delta_y & 0 )
& && &&&incy = 1 ;
& & else if(delta_y == 0 )
& && &&&v_Lcd12864DrawLineX_f( StartX, EndX, StartY, Color ) ;& &
& && &&&incy = -1 ;
& & }& & delta_x = ABS( delta_x );& &
& & delta_y = ABS( delta_y );
& & if( delta_x & delta_y )
& && &&&distance = delta_
& && &&&distance = delta_
& & v_Lcd12864DrawPoint_f( StartX, StartY, Color ) ;& &
& & /* Draw Line*/
& & for( t = 0 ; t &= distance+1 ; t++ )
& && &&&v_Lcd12864DrawPoint_f( StartX, StartY, Color ) ;
& && &&&x += delta_
& && &&&y += delta_
& && &&&if( x & distance )
& && && && &x -=
& && && && &StartX +=
& && &&&if( y & distance )
& && && && &y -=
& && && && &StartY +=
}老规矩,我们用这个函数随便画任意斜率的几条直线看看。
v_Lcd12864DrawLine_f( 0, 0, 127, 63, 1 ) ;
v_Lcd12864DrawLine_f( 0, 63, 127, 0 , 1 ) ;
v_Lcd12864DrawLine_f( 12, 0, 127, 63, 1 ) ;
v_Lcd12864DrawLine_f( 52, 63, 127, 0 , 1 ) ;
v_Lcd12864DrawLine_f( 32, 63, 98, 0, 1 ) ;
v_Lcd12864DrawLine_f( 67, 0, 127, 63 , 1 ) ;下面是具体的效果图:
观摩!!51黑有你更精彩!
这么高级的功能怎么没人顶呢!顶起来!
这个不错我先回复,
挺好的程序
我的撒撒手动阀手动阀楼上的啦啦啦啦
想不到12864还可以画图,,用按键控制喏,很有意思
这个好,工程应用上非常有用。太感谢了
delta_x = ABS( delta_x );& &
& & delta_y = ABS( delta_y );
对不起,原谅我是个菜鸡,这个ABS是个函数吗?那为什么没看到定义呢?
delta_x = ABS( delta_x );& &
& & delta_y = ABS( delta_y );
对不起,原谅我是个菜鸡,这个ABS是个函 ...
#include&math.h&
Powered by

我要回帖

更多关于 液晶屏12864吧 的文章

 

随机推荐