单片机及通信接口设计课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)。

相关文档
最新文档