历史上的今天
今天是:2024年12月29日(星期日)
2020年12月29日 | 1602的各种显示效果(静态 动态 移动 滚动显示程序)
2020-12-29 来源:51hei
1602的各种显示效果,包括静态显示,动态显示,滚动显示等
单片机源程序如下:
/*-----------------------------------------------
名称:LCD1602
内容:通过标准程序移屏滚动显示字符
引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
------------------------------------------------*/
#include #include sbit RS = P2^4; //定义端口 sbit RW = P2^5; sbit EN = P2^6; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 判忙函数 ------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); } /*------------------------------------------------ 写入命令函数 ------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; } /*------------------------------------------------ 写入数据函数 ------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ 清屏函数 ------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); } /*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } } /*------------------------------------------------ 写入字符函数 ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); } /*------------------------------------------------ 初始化函数 ------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ } /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main(void) { LCD_Init(); LCD_Clear();//清屏 LCD_Write_Char(7,0,'o'); LCD_Write_Char(8,0,'k'); LCD_Write_String(1,1,"xxxxxxxxx"); while (1) { DelayMs(200); LCD_Write_Com(0x18);//左平移画面 0x1C 是右平移 } }
史海拾趣
|
在start.s中, copy_loop: ldmia r0!, {r3-r10} stmia r1!, {r3-r10} cmp r0, r2 ble copy_loop 这里搬运过程,是以8个寄存器为单位的,(也就是8*4字节一次), 我看不懂的是,如果_START ...… 查看全部问答> |
|
首先强调下,我只是刚入门的。 我把PB下的startup.s移到ADS下 自己新建的project。make没有问题了。````之后,我就不知道要怎么验证了,请大家指导下,谢谢… 查看全部问答> |
|
YLP2440核心板内存能扩到256M吗. YLP2440核心板带有64M RAM, 由于项目需要扩到256M,请问这个好能实现吗,是不是仅添加两根地址线就可以了? 2440的BANK为128M,这样需要2个BANK,硬件上需要那些改动?… 查看全部问答> |
|
郑州单片机设计,嵌入式开发,电子项目设计 郑州智软科技公司 http://www.zhiruancn.com/ 为你提供定制化,个性化的电子产品设计方案。 包含需求定制----产品设计----产品加工等环节。 如有需要请联系 0371-66623272 或者QQ:1242335301 … 查看全部问答> |
|
寻求合作,基于三星S3C2410的WinCE5设备,解锁、安装中文系统和自己的App,有朋友愿意接这样的项目吗? 基于三星S3C2410的WinCE5设备,解锁、安装中文系统和自己的App,有朋友愿意接这样的项目吗? 谢谢!… 查看全部问答> |
|
用msp430f1611的捕获模式来测量方波的频率时发现:能正确测量的最高频率不超过200k。我用的是8M晶振。请问:用什么办法可以测量更高的频率呢,最好能到1M Hz?… 查看全部问答> |
|
我尽量给大家带来些新东西,一位叫做XPG 的国外网友花了好几周的时间用launchpad做个件大家很难想到的事情,他在G2553上移植了一个Ipv6的协议栈。 他使用了一个 ENC28J60 的网络MAC/PHY 模块,以他的说法是cheap off的打折货。 这位Launchpad的网 ...… 查看全部问答> |




