完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
控制器7920
代码没啥好说,我尽量多写了注释,播放动画也很流畅的 亮点就是支持中英文混合输出,其他没啥 最后喊下论坛口号: "支持开源论坛,支持原子哥!" [C] 纯文本查看 复制代码 #ifndef _LCD12864_H #define _LCD12864_H #include "my51.h"#define LCD_dataBus P0 //总线***it LCD_EN = P3^4; //使能控制***it LCD_RS = P3^5; //数据_命令选择端***it LCD_RW = P3^6; //读写控制***it LCD_PSB= P3^7; //串并选择,H并行,L串行extern bool bShowPicFlag; //绘图时图像显示控制(仅控制GDRAM)/*************************基本功能函数*********************************************/extern void LCD12864_init();//初始化,必须置顶调用extern void LCD12864_setPos(u8 row, u8 cols);//设置光标位置extern void LCD12864_writeByte(u8 dat);//写一个字节extern void LCD12864_writeCmd(u8 cmd);//写指令extern u8 LCD12864_readByte();//读一个字节ramextern u8 LCD12864_readIR();//读暂存器extern bool LCD12864_isBusy();//判忙/*************************调用基本字库显示文字**************************************///独创支持全角半角字符及中英混合的字符串,或字符串的子串,起始行号row(0-3)和列坐标cols(0-15),写满屏幕为止//行号4-7行是滚动区extern void LCD12864_writeData(u8 row, u8 cols,u8* pBuf,u8 dataSize);//写一堆数据extern void LCD12864_earseSomeDDRam(u8 row,u8 cols,u8 dataSize);//擦除N字节DDRam/*************************用户自定义图标字体****************************************/extern void LCD12864_writeCGRAM(u8 userRamNum,u8* pCGRAM_userCode); //写自定义图标字体extern void LCD12864_showCGRAM(u8 row,u8 cols,u8 num) ;//显示自定义图标字体,row(0-3),cols(0-15)extern void LCD12864_clearCGRAM(u8 CGRAM_groupNum) ; //CGRAM清零(初始化也可清0)/*************************图像显示功能函数**********************************************/extern void LCD12864_showGDRAM(bool bShowImage); //GDRAM绘图显示开关extern void LCD12864_clearGDRAM(); //液晶整个可视区的GDRAM快速清0//前4参数:起始点x(0-7)位址,y(0-63)坐标,要显示的宽度(1-128)和高度(1-64)[可显示从图像左上角开始的部分区域]//后4参数:图像代码地址,图像本身的宽度(1-128)和高度(1-64), 反白(true反白,false不反白)//画图填充GDRAM,注:显示的区域或者图像本身宽度必须是8的倍数extern u8 LCD12864_drawGDRAM(u8 x,u8 y,u8 width,u8 height,u8 *pImageCode,u8 imageWidth,u8 imageHight,bool bReverse);extern void LCD12864_drawDot(u8 x,u8 y,u8 flag); //打点,x(0-127),y(0-63),flag(0正常,1反白,2清0)extern bool LCD12864_drawXYLine(u8 x1, u8 y1,u8 x2, u8 y2,u8 flag); //画水平或垂直直线extern void LCD12864_drawAnyLine(u8 x1, u8 y1,u8 x2, u8 y2,u8 flag) ; //画任意直线extern void LCD12864_drawRectangle(u8 x,u8 y ,u8 width,u8 height,u8 flag);//画矩形extern void LCD12864_drawFillRect(u8 x,u8 y, u8 width,u8 hight,u8 flag); //填充矩形,可对矩形区反白或清0extern void LCD12864_drawVerticalSquare(u8 x,u8 y,u8 r,u8 flag); //画站立的正方形extern void LCD12864_drawCircle(u8 x0,u8 y0,u8 r,u8 flag); //画圆//打点法画图实在太慢了,就不写了,打点法反白矩形区还可以,建议矩形范围小一些,不然比较慢//打点法效果最好,因为文字的矩形区比较小,速度很快//不过绘图法反白文字效率高,flash空间充裕的建议用绘图法/***************************全屏滚动*******************************************///需要滚动时,用LCD12864_writeScrollData()函数,参数和LCD12864_writeData()一样extern void LCD12864_writeScrollData(u8 row,u8 cols,u8* pBuf,u8 dataSize);//写数据 (滚动模式)extern void LCD12864_setScrollPos(u8 row, u8 cols);//设置滚动模式的坐标extern void LCD12864_showScrollCGRAM(u8 row,u8 cols,u8 CGRAM_groupNum);//用于CGRAM滚动显示前执行extern void LCD12864_startScroll(u8 scrollNum,u16 delay_ms); //滚动开始#endif lcd12864.rar (7.58 KB ) |
|
相关推荐
20个回答
|
|
学习了,LCD12864_drawDot写得蛮简洁的。
实现混合输出,不好解决的是字符宽度不一致。 看了下您的代码, 为了实现“汉字在液晶上要偶对齐”,您采用的是“位址空移一个字节”。 此方法有一定局限,有的时候就是想在奇数位开始显示汉字, 比如想让“20xx年xx月xx日”中置,不得不用画图的方法写上年月日。 不知楼主可有好的解决办法? |
|
|
|
哇,不错啊,谢谢楼主分享
|
|
|
|
奇数位显示汉字的话用自定义汉字
|
|
|
|
竟然酷了, 谢谢原子哥啊
|
|
|
|
好东西!收藏了!
|
|
|
|
好东西当然要支持,感谢分享!不知道用我这个直接混合输出怎么样http://www.openedv.com/posts/list/43524.htm
|
|
|
|
度兄 你这个太专业了啊 哈哈
|
|
|
|
我目前在TFT、OLED上面已经使用了,方便的很,直接按照格式输出,显示什么不用找相应的函数了,一个函数通杀,哈哈
|
|
|
|
学习了,您这个写得也蛮细致的,不过放在51单片机上估计够呛。
12864液晶大多数时候都是给51这样的单片机使唤。 回复【5楼】xouou_53320: 我说的“画图的方法”指的便是“用自定义汉字” 曾考虑过从12864液晶字库读出文字点阵,然后一个个把字用类似于LCD12864_drawDot这样的函数在任意指定位置显示出来。 不过这么做相关开销挺大。 |
|
|
|
|
|
|
|
必须的
|
|
|
|
9楼写错了,每个人写的函数名相似,所实现的 不尽相同。
DrawDot函数内容可以是只画一点(小图),也可指把图的内容一点一点描画出来(大图)。 看了您的代码,意为前者。 自定义汉字 与 绘图 确实是有些不同: 但都得取模,每个字无法避免要消耗256bit的单片机空间(压缩算法不计)。 |
|
|
|
我的DrawDot可以画大图的, 全屏也可以
|
|
|
|
这个不错,正好拿来学习
|
|
|
|
哇塞,高手的讨论,自己只是简单的会用12864,没想到,还有这么多的注意事项,这么多的用处呀。厉害,自己要多多的琢磨了
|
|
|
|
学习学习学习
|
|
|
|
写的不错赞一个
|
|
|
|
这个论坛还是比较的好,确实开源。嗨,还是这个论坛的管理正规一些。顶起!!
|
|
|
|
刚写完一个7920程序,回头学习学习,改进一下程序,mark
|
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2845 浏览 0 评论
3353 浏览 9 评论
3030 浏览 16 评论
3526 浏览 1 评论
9135 浏览 16 评论
1261浏览 3评论
651浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
641浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2389浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1952浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-4 11:07 , Processed in 1.230223 second(s), Total 82, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号