已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LCD1602之msp430单片机和C51单片机C语言/*/1.msp430单片机C语言/*/#includemsp430f6638.h/*P5.3-E P57 P56 P55 P54 P53 P52 P51 P50P5.4-RS P5.5-RW P57 P56 RW RS EP52 P51 P50P2OUT-wdata*/#define uchar unsigned char;#define uint unsigned int;/*显示字符串可将字符串放入数组,例如显示ancd efdg*/*定义一个数组*/*uchar code ttt=ancd efdg;/字符串用双引号引起来,空格计入字符串的元素/*uchar code kkk=ffba ggddmm;/上句加空格9个元素,该句加两个空格12个元素/*元素个数在循环显示时要使用*/*为循环显示字符串还得定义一个变量*/ uchar n;/定义变量nvoid delay(int time)/延迟函数 while(time-); /延迟时间 void writeCommandLcd(unsigned char comd)/ 写入命令 P5OUT &= 0x10; /RS清0 (运算后P5=xxx0 xxxx,即RS=0其他位状态不变) P5OUT &= 0x20; /RW清0 (运算后P5=xx0x xxxx,即RW=0其他位状态不变) P5OUT &= 0x08; /使能E清0(运算后P5=xxxx 0xxx,即E=0其他位状态不变)/上面三个语句执行完后P5OUT=xx000xxx,用P5OUT &=0x38;可一次完成。 P2OUT = comd; /送命令到P2OUT准备输出进入1602,等E下降沿来即可进入1602. P5OUT |= 0x08; /使能E置1,P5OUT= xxxx xxxx+0000 1000=xxxx1xxx,E=1. delay(10); P5OUT &= 0x08; /使能E清0,这样E从1变0,产生一个下降,写入命令到1602。 void writeDataLcd(unsigned char dat)/ 写入命令 P5OUT |= 0x10; /RS置1 (运算后P5=xxx1 xxxx,即RS=1其他位状态不变) P5OUT &= 0x20; /RW清0 (运算后P5=xx0x xxxx,即RW=0其他位状态不变) P5OUT &= 0x08; /使能E清0(运算后P5=xxxx 0xxx,即E=0其他位状态不变) P2OUT = dat; /送数据到P2OUT准备输出进入1602,等E下降沿来即可进入1602. P5OUT |= 0x08; /使能E置1,P5OUT= xxxx xxxx+0000 1000=xxxx1xxx,E=1. delay(10); P5OUT &= 0x08; /使能E清0,这样E从1变0,产生一个下降,写入命令到1602。 void lcd_init(void) /初始化LCD delay(10); writeCommandLcd(0x38);/显示模式设置为1602,5X7点阵显示。8位数据接口。 delay(10); writeCommandLcd(0x08);/打开显示液晶 writeCommandLcd(0x01);/清屏,光标回到起点 /writeCommandLcd(0x0C);/开显示,关光标,即不显示光标。 /writeCommandLcd(0x0E);/开显示,开光标,有光标但不闪烁。 writeCommandLcd(0x0F);/开显示,开光标,有光标且光标闪烁。 writeCommandLcd(0x06);/读写操作时地址自动加1。 int main(void)WDTCTL=WDTPW+WDTHOLD; P2DIR=0xff; P5DIR=0xff; lcd_init(); /*字符串显示代替单字显示* for (n=0;n9;n+) writeData(tttn);/从第一行第一位显示(第2行显示需80h+40h) delay(10); weitecommandLcd(0x80+0x40);/第2行显示必须从第2行首地址开始 for (n=0;n12;n+) writeData(tttn);/从第一行第一位显示(第2行显示需80h+40h) delay(10); while(1); *闪烁动态效果可将延迟时间加长*/ while(1) writeCommandLcd(0x80);/从第一行第一位显示(地址是80h)/*其实1行1列地址是00h,但在输入地址是时要保证D7位为1,其余位确定的是实际地址,这样00h=0100 0000b要保证D7为1,就变成了1000 0000b,即80h,相当于给实际地址加8,如第2行2列,实际地址为41h=0100 0000b,高位变1就成了11000000b=c0h*/ delay(10); writeDataLcd(0x30+0);/30为0在1602字库的存储地址,依次类推1、2、3. delay(10); writeDataLcd(0x30+1); delay(10); writeDataLcd(0x30+2); delay(10); writeDataLcd(0x30+3); while(1); 液晶显示由状态控制端RS、RW和E控制输入输出,但由于只有DB7到DB0一个字节的I/O连接单片机与1602等液晶,控制指令和显示数据都要通过这一个I/O口进出,所以,程序编写要编写两个函数,一个指令输入函数(即void writecommandLcd(char unsigned word)),一个数据输入函数(即void writedataLcd(int signed dat)两个函数的不同只是RS、RW和E的状态不同。/*/2.C51单片机C语言/*/# include/*电路连接P1-DB0DB7P2.0-RSP2.1-RWP2.2-E*/# define LCD_DB P1sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_E=P22;/*定义函数*/# define ucharunsigned char# define uint unsigned intvoid LCD_init(void);/声明初始化函数void LCD_write_command(uchar command);/写指令函数void LCD_write_data(uchar dat);/写数据函数void LCD_disp_char(uchar x,uchar y,uchar dat);/在某个屏幕位置上显示一个字符,X(0-16),y(1-2)/void LCD_check_busy(void);/检查忙函数。我没用到此函数,因为通过率极低。void delay_n40us(uint n);/延时函数/*/*初始化函数*void LCD_init(void)LCD_write_command(0x38);/设置8位格式,2行,5x7LCD_write_command(0x0c);/整体显示,关光标,不闪烁/LCD_write_command(0x06);/设定输入方式,增量不移位/LCD_write_command(0x01);/清除屏幕显示delay_n40us(100);/实践证明,我的LCD1602上,用for 循环200 次就能可靠完成清屏指令。/*/*写指令函数*设置先向1602写入的数据为地址*void LCD_write_command(uchar dat)LCD_DB=dat;LCD_RS=0;/指令LCD_RW=0;/写入LCD_E=1;/允许LCD_E=0;/产生下降沿delay_n40us(1);/实践证明,我的LCD1602 上,用for 循环1 次就能完成普通写指令。/*/*再写数据函数*向1602中写入数据*void LCD_write_data(uchar dat)LCD_DB=dat;LCD_RS=1;/数据LCD_RW=0;/写入LCD_E=1;/允许LCD_E=0;/产生下降沿delay_n40us(1);/*/*显示一个字符函数*void LCD_disp_char(uchar x,uchar y,uchar dat)uchar address;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/*/*检查忙函数*voidLCD_check_busy() /实践证明,在我的LCD1602 上,检查忙指令通过率极低,以至于不能正常使用LCD。因此我没有再用检查忙函数。而使do/用了延时的方法,延时还是非常好用的。我试了一下,用/LCD_E=0; /for 循环作延时,普通指令只要1次循就可完成。清屏指令LCD_RS=0; /要用200次循环便能完成。LCD_RW=1;LCD_DB=0xff;LCD_E=1;while(LCD_DB7=1);*/*延时函数*void delay_n40us(uint n) uint i;uchar j;for(i=n;i0;i-)for(j=0;j2;j+); /在这个延时循环函数中我只做了2次循环, /实践证明我的LCD1602 上普通的指令只需1次循环就能可靠完成。/*/*主函数*void main(void)LCD_init();LCD_disp_char(0,1,A);while(1);/*3 灯光闪烁程序*/#include /*msp430G2553控制与P1.0和P1.6连接的两个LED等闪烁闪烁效果可以用数组形式设定,循环将数组的值赋给输出P1.*/char dis12=0x41,0x00,0x41,0x00,0x01,0x00,0x40,0x00,0x40,0x00,0x01,0x00;/定义有12的元素的数组dis12,可以存储12种显示状态int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西省吉安市中等专业学校工作人员招聘考试试题
- 2025江苏农林职业技术学院工作人员招聘考试试题
- 大型闸门启闭机更换施工方案
- 2026年环保科技碳捕捉创新报告及行业减排分析报告
- 2026年智能机器人服务行业报告及未来五至十年消费模式报告
- 教育机器人行业发展趋势:2025年人工智能技术创新可行性研究
- 2026年智能调味汁创新技术报告
- 质量保证协议书汇编15篇
- 26年银发大健康产业总结课件
- 26年中级护理员培训课件
- 小吃一条街运营管理制度
- 财务付款制度规范
- 2026贵州习酒投资控股集团校招试题及答案
- 产品可靠性检测与分析报告范本
- 数字万用表的使用课件
- 农村房屋火灾损失申请书
- 邮政竞聘笔试题库及答案
- 党的二十届四中全会精神题库
- Q-SY 13034-2024 物料主数据数字化描述规范
- 预应力张拉安全培训课件
- 中央民族大学宏观经济学期末练习B试卷
评论
0/150
提交评论