武汉纺织大学微机原理与接口技术课程设计基于AT89S52单片机LCD显示院系:机械工程与自动化学院指导老师:张成俊班级:机械082姓名:张昊第一章绪论1.1课题背景当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。
人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。
在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display)为代表的平板显示器发展最快,应用最广。
LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。
液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。
特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。
1.2课题设计目标本设计是基于AT89S51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。
本次设计的目的在于利用单片机和IIC技术来显示英文字母。
1.3课程设计的主要工作(1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。
(2)熟悉所选芯片的功能并完成具体电路设计。
(3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。
1.4 设计要求循环显示字母。
第二章硬件设计2.1 LCD1602简介2.1.1 LCD1602引脚功能LCD1602引脚如图2.1所示图2.1 LCD1602引脚图引脚图的功能如表2—1所示表2—1引脚功能图2.1.2 LCD1602显示模指令集(1)清屏功能:清DDROM值和AC值(2)归位功能:光标复位,光标返回到地址00H(3)输入方式设置功能:设置光标,画面移动方式。
其中:I/D=1:数据读写操作后,AC 自加一;I/D=0:数据读写操作后,AC 自减一;S=1:数据读写操作,画面平移;S=0:数据读写操作,画面不动;(4)显示开关控制功能:设置显示、光标和闪烁开关。
其中:D 表示显示开关,D=1 为开,D=0 为关;C 表示光标开关,C=1 为开,C=0 为关;B 表示闪烁开关,B=1 为开,B=0 为关。
(5)光标、画面位移功能:光标、画面移动。
其中:S/C=1 画面移动一个字符位;S/C=0 光标移动一个字符位;R/L=1:右移;R/L=0 左移。
(6)功能设置功能:工作方式设置(初始化指令)。
其中:DL=1,8 位数据接口;DL=0,4 位数据接口;N=1,两行显示;N=0,一行显示;F=1,5*10 点阵显示;F=0,5*7 点阵显示。
(7)CGRAM 地址设置功能:设置CGRAM 地址,A5~A0=0~3FH。
(8)DDRAM 地址设置功能:设置DDRAM 地址。
其中:N=0,一行显示A6~A0=0~4FH;N=1 两行显示,首行A6~A0=0~2FH,次行A6~A0=40~67H。
(9)读BF 及AC 值功能:读忙BF 和地址计数器AC 的值。
其中:BF=1:忙,BF=0:准备好。
此时AC 值意义为最近一次地址设置(CGRAM 或DDRAM)定义。
(10)写数据功能:根据最近设置的地址性质,数据写入CGRAM 或DDRAM 中。
(11)读数据功能:根据最近设置的地址性质,从CGRAM或DDRAM 数据读出。
2.2系统电路图系统的电路图如2.7 所示:运行状况如图2.8:图2.9 运行状态第三章软件设计3.1系统框图本课题的程序设计是在C语言的基础之上的,可分为两大模块,分别是:(1)IIC协议;(2)LCD显示。
程序总体框图如图3.1 所示:图3.1总程序框图LCD 显示程序框图如图3.2 所示:图3.2LCD显示程序框图3.2 程序清单1.#include <reg51.h>2.#include <intrins.h>3.#define uchar unsigned char4.#define uint unsigned int5.sbit LCD_RS = P3^0;6.sbit LCD_RW = P3^1;7.sbit LCD_EN = P3^2;8.uchar code dis1[] = {" good morning "};9.uchar code dis2[] = {" everyone "};10.void delay(int ms)11.{12.int i;13.while(ms--)14. {15.for(i = 0; i 250; i++)16. {17. _nop_();18. _nop_();19. _nop_();20. _nop_();21. }22. }23.}24.bit lcd_busy()25.{26. bit result;27. LCD_RS = 0;28. LCD_RW = 1;29. LCD_EN = 1;30. _nop_();31. _nop_();32. _nop_();33. _nop_();34. result = (bit)(P0&0x80);35. LCD_EN = 0;36.return result;37.}38.voi d lcd_wcmd(uchar cmd)39.{40.while(lcd_busy());41. LCD_RS = 0;42. LCD_RW = 0;43. LCD_EN = 0;44. _nop_();45. _nop_();46. P0 = cmd;47. _nop_();48. _nop_();49. _nop_();50. _nop_();51. LCD_EN = 1;52. _nop_();53. _nop_();54. _nop_();55. _nop_();56. LCD_EN = 0;57.}58.void lcd_wdat(uchar dat)59.{60.while(lcd_busy());61. LCD_RS = 1;62. LCD_RW = 0;63. LCD_EN = 0;64. P0 = dat;65. _nop_();66. _nop_();67. _nop_();68. _nop_();69. LCD_EN = 1;70. _nop_();71. _nop_();72. _nop_();73. _nop_();74. LCD_EN = 0;75.}76.void lcd_pos(uchar pos)77.{78. lcd_wcmd(pos|0x80);79.}80.void lcd_init()81.{82. delay(15);83. lcd_wcmd(0x38);84. delay(5);85. lcd_wcmd(0x38);86. delay(5);87. lcd_wcmd(0x38);88. delay(5);89. lcd_wcmd(0x0c);90. delay(5);91. lcd_wcmd(0x06);92. delay(5);93. lcd_wcmd(0x01);94. delay(5);95.}96.void lcd_clr()97.{98. lcd_wcmd(0x01);99. delay(5);100.}101.void flash()102.{103. delay(600); 104. lcd_wcmd(0x08);105. delay(200); 106. lcd_wcmd(0x0c);107. delay(200);108. lcd_wcmd(0x08);109. delay(200);110. lcd_wcmd(0x0c);111. delay(200);112.}113.main()114.{115. uchar i,j;116. delay(10);117. lcd_init(); 118.while(1)119. {120. lcd_clr();121.122. lcd_pos(0x10); 123. i = 0;124.while(dis1[i] != '\0')125. { lcd_wdat(dis1[i]);126. i++;127. }128. lcd_pos(0x50);129. i = 0;130.while(dis2[i] != '\0')131. {132. lcd_wdat(dis2[i]);133. i++;134. }135. for(j=0;j<16;j++)136. {137. lcd_wcmd(0x18);138. delay(100);139. }140. flash();141. }142. }第四章调试程序的调试是用Keil 软件和Proteus 联调的,LCD 两行滚动显示的字符,第一行为“good morning”第二行为"everyone",两行同时向右平移。
调试后的效果图如4.1 所示:图4.1调试后的效果图第五章总结通过本次课程设计,我熟悉和掌握了IIC 的原理及其应用,能够初步使用LCD1602 显示字符等。
本课题的程序设计是基于C语言的,C 语言具有方便,快速,高效。
当然本设计也存在不足之处,由于LCD1602 只能显示字符,而不能显示汉字和图片,如果想要显示汉字和图片的话,需要用到12832 等的LCD 模块,这是本设计的一大缺陷。
另外,这次课题中的程序设计中,对时序要求很严格,尤其是IIC。
通过本次课程设计,我有熟悉和掌握了单片机开发软件Keil和仿真软件Proteus。