单片机及通信接口设计课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机及通信接口设
计课程设计报告
题目:基于STC89S52单片机开发板的功能设计与应用
撰写日期:2011年11月
一、设计要求
二、设计电路及功能说明
三、编程思路及框架
四、调试结果及分析(1、这里写出题目实现结果;2、调试中出现的问题及解决的方
法;3、老师的提问及解决的方法)五、总结(心得体会)
目录
目录
第一章课程设计要求及功能说明 (1)
1.1课程设计要求 (1)
1.2课程设计电路及功能说明 (1)
第二章程序设计及结果分析 (2)
2.1程序设计思想 (1)
2.2调试结果分析及问题解答 (1)
单片机及通信接口设计课程设计总结 (4)
第一章课程设计要求及功能说明
1.1 课程设计要求
跑马灯。设计要求:“123456”6个数字由右边进入1602 液晶显示器模块,再由左边走出LCD模块,连续不断。
1.2课程设计电路及功能说明
1.2.1设计电路
1602 液晶显示器电路
LCD1602 引脚排列
LCD1602 属于字符型显示器件,可显示2 行16 个字符,字符显示尺寸为5×7 个像素点。在显示模块的ROM 中存放ASCII 码字符字模等,输出时只需提供字符编码和显示位置即可。LCD1602 引脚排列如上图所示。其中,D0-D7 为数据口,E 为使能信号,RW 为读写信号,RS 为寄存器选择信号,VL 为亮度调节引脚,VCC、VCC1、GND 和GND1 均为电源引脚。
LCD1602 的工作流程图
1.2.2功能说明
“123456”6个数字由右边进入1602 液晶显示器模块,再由左边走出LCD模块,连续不断。单片机的P3.4脚接E执行使能控制,读操作时,高
电平有效;写操作时,下降沿有效。P3.5脚接rs进行寄存器选择,当
rs=1时,指向数据寄存器;当rs=0时,若执行写操作,则指向指令寄存器,若执行读操作,则指向地址计数器。
1
第二章程序设计及结果分析
2.1编程思路及框架
以单片机为核心,LCD1602液晶显示器为输出器件。使单片机的P3.4
脚接E执行使能控制,读操作时,高电平有效;写操作时,下降沿有效。
P3.5脚接rs进行寄存器选择,当rs=1时,指向数据寄存器;当rs=0时,
若执行写操作,则指向指令寄存器,若执行读操作,则指向地址计数器。,而LCD1602 属于字符型显示器件,可显示2 行16 个字符,字符显示尺寸
为5×7 个像素点。在显示模块的ROM 中存放ASCII 码字符字模等,输出
时只需提供字符编码和显示位置即可。
2.2实现结果
“123456”6个数字由右边进入1602 液晶显示器模块,再由左边走出LCD模块,连续不断。
2.3调试中出现的问题及解决的方法
①实验一开始将uchar table1[]=“123456”写入时,实验结果出现
乱码。
解决的办法:将定义处的“123456”中数字6的后面用空格键空出16 个空位,以便“123456”在液晶显示屏上循环时不出现除123456以外的
任何字符。
③实验一开始将write_com(0x80+00);设置为第一行第一列时屏幕不
显示任何数字。
解决的办法:经过精确计算将write_com(0x80+00);程序改为
write_com(0x80+0x15);设置显示位置为第一行第15列即可。
④实验一开始只显示“123456”,但是不循环。
解决的办法:将原来程序最后一行while(1);去掉即可。
2.4老师的提问及解决的方法
①说说“wela=0;dula=0;”在程序中的作用?
答:wela 是控制数码管哪个亮的位输出选通信号,dula 是控制数码管显示什么字符或数字的段码。由于本实验是使用1602 液晶显示器,为使其工作时不受数码管干扰,所以将wela 和dula 设置为0,即处于低电平不工作状态。
另外,我在图书馆查阅到北京航空航天大学出版社出版的《51 单片机C 语言应用与开发》一书中,提到数码管的动态扫描显示的有关信息:为了防止各个显示器同时显示同一个字符,各显示器的公共端并不接到电源或地,而是接到另一组控制信号,即位输出口上。在动态扫描显示方式下,一组数码管显示器需要两组信号控。一组是字段码输出口输出的字形代码,用来控制显示的字符形状;另一组是位输出口输出的控制信号,用于控制哪一位显示器工作,也称为位码。在两组信号的共同控制下,可以按顺序一位一位地轮流点亮每一个显示器显示各自的字符,以实现数码管的动态扫描显示。
②怎么计算延时函数值
答:延时函数值=(delay 括号内的数值x×循环次数b)×10^-6s,即延时函数值由delay 括号内的数值乘以循环的次数,再进行单位换算(将微秒换算成秒)
③如何使无限循环的跑马灯控制在有限次数内
答:假设循环3 次,则定义无符号字符c
将for(c=0;c<3;c++)语句加到主函数中,即
void main() //主函数
{
uchar a,c;
init();
for(c=0;c<3;c++)
{
write_com(0x80+0x15); //设置显示位置为第一行
delay(1000);
for(a=0;a<27;a++)
{
write_date(table1[a]);
delay(1000);
}
}
}
④解释下列程序:void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
答:该段程序是写指令到LCD。当rs=0时,执行写操作,则指向指令寄存器写入命令;lcden=0 执行使能控制,写操作时,下降沿有效。
⑤使跑马灯的123456”6个数字从1602液晶显示器的第一行第二列开始
答:将主函数中的write_com(0x80+0x15);改为write_com(0x80+01)。