核技术与自动化工程学院实习报告_第1页
核技术与自动化工程学院实习报告_第2页
核技术与自动化工程学院实习报告_第3页
核技术与自动化工程学院实习报告_第4页
核技术与自动化工程学院实习报告_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成都理工大学实习报告成 都 理 工 大 学核技术与自动化工程学院实习报告实习名称: 单片机课程设计 实习内容: 单片机的运用 姓 名: 许助 学 号: 201106010208 专 业: 测控技术与仪器 学 期: 2013-2014 第二学期 任课教师: 成毅 实习地点: 校内 实习时间: 2014.6 一:设计内容与要求1:基本要求 1.1:完成单片机电路板的焊接与调试。 1.2:通过编程来实现基本功能外加附加功能。2:基本功能(已实现) 2.1:流水灯的闪烁和移动。 2.2:按键控制流水灯的刷新频率和亮度(占空比)。 2.3:利用串口通讯来控制流水灯的刷新频率和亮度。 2.4:利用定时器来

2、改变刷新频率和亮度(占空比)。3:附加功能 3.1:i/o键盘的扩展。 3.2:1602液晶的显示控制。 (已实现:显示心形图形) 3.3:串口加液晶显示传输。 3.4:实现加减乘除的计数器。 3.5:实现可设置的定时功能。二:电路原理说明1:电路的原理框图 1.1:电源电路 1.2:单片机cpu 1.3:晶振电路与独立按键电路 1.4:双复位电路与红外接受电路 1.5:rs232电路 1.6:接口电路与上拉电阻排 1.7:i/o扩张排针 1.8:8路led灯电路与1602液晶电路 2:电路原理介绍 2.1:键盘接口的电路原理 键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人

3、工干预单片机的主要手段。 按键的确认,键的闭合与否,反映在行线输出电压上就是呈现出高电平或低电平,如果高电平表示断开的话,那么低电平则表示键闭合,所以通过对行线电平的高低状态的检测,便可确认按键按下与否。为了确保cpu对一次按键动作只确认一次按键,必须消除抖动的影响。消除抖动分软件和硬件两种(本实验采用的是定时器消抖)。 独立式键盘是各按键相互独立,每个按键各接一根输入线,一根输入线上的按键工作状态不会影响到其他输入线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断那个键被按下了。 独立式按键电路配置灵活,软件简单,但每个按键需要占用一根输入口线,在按键数量较多时,需要较多的输入口线

4、且电路结构复杂,故此种键盘适用于按键较少或操作速度较高的场合。 2.2:led流水灯显示驱动的电路原理 由于led正向伏安特性非常陡(正向动态电阻非常小),要给led供电就比较困难。直接用电压源供电,否则电压波动稍增,电流就会增大到将led烧毁的程度。为了稳住led的工作电流,保证led能正常可靠地工作,我需要加一个驱动,本实验加的驱动就是每个led灯串联了一个电阻,由欧姆定律的知识可知,当电压增大时,由于串联了电阻,流过led的电流就减小,从而控制在有效电流范围里面。 2.3:通讯接口电路原理 本实验采用的是usb通信接口设计 usb总线的控制是主从结构,有一个host和多个device。

5、host负责总线的带宽管理(帧的编组),device枚举,device的编址。device对host在总线上的行为做出回应,如从总线上读取数据或写出数据,处理或生成回应。usb总线的数据线由两根差分信号线d+ d-构成,host和device都挂接在这两条信号线上通讯。usb协议内容分两大块,一个是对通讯逻辑进行分层定义;一个是对设备的组成逻辑进行分层定义。数据包的最大长度为1023个字节,一个事务最多只有一个数据包;数据处理顺序由host控制,一个事务的包不会分到不同的帧里;事务处理中,包的传输是顺序,如令牌包总在数据包之前传送;令牌包都是由host发出的;设备device根据令牌包决定自己

6、是否发送数据,不能主动发送数据。3:附加功能(液晶l602显示)的电路原理介绍显示容量:162 个字符 芯片工作电压:4.55.5v 工作电流:2.0ma(5.0v) 模块最佳工作电压:5.0v 1602lcd 采用标准的 14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如下表所示: 编号 符号 引脚说明 编号 符号 引脚说明 1 vss 电源地 9 d2 数据 2 vdd 电源正极 10 d3 数据 3 vl 液晶显示偏压 11 d4 数据 4 rs 数据/命令选择 12 d5 数据 5 r/w 读/写选择 13 d6 数据 6 e 使能信号 14 d7 数据 7 d0 数据 15

7、bla 背光源正极 8 d1 数据 16 blk 背光源负极 第 1 脚:vss 为地电源。 第 2 脚:vdd接 5v正电源。 第 3 脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,使用时可以通过一个 10k 的电位器调整对比度。 第 4 脚:rs 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:r/w 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 rs和 r/w共同为低电平时可以写入指令或者显示地址,当 rs 为低电平 r/w 为高电平时可以读忙信号,当 rs 为高电平 r/w为低电平时可以写入数据。 第 6 脚:e端为使

8、能端,当 e 端由高电平跳变成低电平时,液晶模块执行命令。 第 714脚:d0d7为 8 位双向数据线。 第 15脚:背光源正极。 第 16脚:背光源负极。三:程序设计 初定义1:系统软件流程框图键盘扫描 定时延时 消抖按键判 断s1按键按下s2按键按下长按短按判断长按短按判断长按进入串口程序,可以控制流水灯的状态短按即控制流水灯的刷新频率长按进入液晶1602的程序,心形图像显示短按即控制流水灯的亮度(占空比)2:各接口电路软件程序及代码说明#include#include#define uchar unsigned char#define uint unsigned intuchar buf

9、;uchar trg; /按键触发标志uchar cont; /按键连续标志位uchar p3value_present; /定义一个p3口的电平值变量uchar readdate; /定义一个读p3口的变量uint num; /刷新频率数字标志位uint num1;uint c=1; /led占空比亮度控制uint a=10;uint b;uint d;uint h;uint x;uchar aa=0xfe; /定义一个中间变量uint e=10; /刷新频率的变量定义uint y;/*lcd1602液晶显示屏,心型图案的初定义*/sbit rs=p05; sbit rw=p06;sbit

10、en=p07; uchar code table=0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1e,0x1e,0x1e,0x1e,0x1e, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01, 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c

11、,0x18,0x00, 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00;/心图案/* 定时器0的初定义子函数*/ void dinyi() tmod=0x02; /定时器0工作方式2,八位自动装载 th0=6; /250us溢出 tl0=6; ea=1; /开总中断 et0=1; tr0=1; /启动定时器0/* 串口初定义子函数,采用定时器1*/void ckdinyi() scon=0x50; /设定串口工作方式 pcon=0x00; /波特率不倍增 tmod=0x20; /定时器1工作于8位自动重载模式, 用于产生波特率 ea=1; es = 1; /允许

12、串口中断 tl1=0xfd; th1=0xfd; /波特率9600 tr1=1; /启动定时器1/* 按键扫描程序*/void scanf() p3value_present=p3; /端口当前值 readdate=p3value_present0xff; /将p3口的电平信号取反 trg=readdate&(readdatecont); /短暂按键记录 cont=readdate; /长按按键记录/* 定义延时函数*/void delay(uint n)while(1)/消抖程序 if(num1n) /计数20ms,按键消抖 num1=0;break; /* 对1602液晶进行写命令函数 *

13、/ void lcd_wcom(uchar com) rs=0; /选择指令寄存器 rw=0; /选择写 p2=com; /把命令字送入p2端口,即液晶 delay(100); /延时一会儿,让1602准备接受数据 en=1; /使能端电平变化,命令送入1602的8位数据口 en=0; /* 对1602液晶进行写数据函数 */void lcd_wdat(uchar dat) rs=1; /选择数据寄存器 rw=0; /选择写 p2=dat; /把要显示的数据写入p2端口 delay(100); /延时一会儿,让1602准备接受数据 en=1; /使能端电平变化,数据送入1602的8位数据口 e

14、n=0; /* 对1602液晶进行初始化函数 */ void lcd_init() lcd_wcom(0x38); /8位数据,双列,5*7的字型 lcd_wcom(0x0c); /开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); /显示地址递增,即写一个数据后,显示数据右移一位 lcd_wcom(0x01); /清屏 /* 主程序*/void main() dinyi(); /按键初定义函数 while(1) scanf(); /扫描函数 if(trg&0x10) /刷新频率按键检测,检测s2按键是否按下 e=a+b*100; /将刷新频率分为五种,即每个灯计数10,110,21

15、0,310,410,510 b+; if(b=5) /按键清零 b=0; if(nume) /刷新频率控制中断计数 num=0; aa=_crol_(aa,1); /将aa右移一位,即后面的右移一个灯 if(trg&0x04) /占空比控制,检测s1是否按下 c+;d=(e*c)/10; /将led灯亮度分为10类if(c=9) /计数清零c=1; d=(e*c)/10; y=e-d; p0=aa; delay(y); p0=0xff; delay(d); delay(80); /延时20毫秒消抖 if(cont&0x10)/按键长按进入串口控制功能 h+; if(h200) while(1)

16、 ckdinyi();/串口初定义程序 if(cont&0x04) /lcd液晶显示程序 x+;if(x200)char m=0; lcd_init(); /初定义函数 lcd_wcom(0x40); /设定cgram地址 for(m=0;m64;m+) /将心型代码写入cgram中 lcd_wdat(tablem); lcd_wcom(0x85); /设定上排的显示位置 for(m=0;m4;m+) /显示心型图案的上半部分 lcd_wdat(m); lcd_wcom(0xc5); /将显示坐标转移到下排和上排相对应的地方 for(m=4;m8;m+) /显示心型图案的下半部分 lcd_wd

17、at(m); while(1); /* 定时器0中断程序*/void t0_frequency() interrupt 1using 2 /频率控制中断程序 num+; num1+; /* 串口中断程序*/void serial() interrupt 4 es = 0; /关闭串行中断 ri = 0; /清除串行接受标志位 buf = sbuf; /从串口缓冲区取得数据 switch(buf) case 0x31: p0=0xfe;break; /接受到1,第一个led亮 case 0x32: p0=0xfc;break; /接受到2,第二个led亮 case 0x33: p0=0xf8;b

18、reak; /接受到3,第三个led亮 case 0x34: p0=0xf0;break; /接受到4,第四个led亮 case 0x35: p0=0xe0;break; /接受到5,第五个led亮 case 0x36: p0=0xc0;break; /接受到5,第六个led亮 case 0x37: p0=0x80;break; /接受到5,第七个led亮 case 0x38: p0=0x00;break; /接受到5,第八个led亮 default: p0=0xff;break; /接受到其它数据 es = 1; /允许串口中断四:系统调试1:硬件调试 焊完电路板后,我将一个简单的流水灯移动

19、程序下载到单片机里面,然后去观察它的现象并测试各芯片引脚的电哦,来检测是否虚焊了,结果是检测正常,各部分功能均能实现。2:软件调试 软件程序的编写和调试花了我两天的时间,中途遇到过几个关卡,比如说占空比的控制,刚开始我设计了一个占空比的程序,觉的我自己的思路没有问题,但是却找不错它不行的原因,后来经过室友一句话的提醒,幡然醒悟,有时候真的是当局者迷,旁观者清啊,还遇到了一个非常低级的问题,算是一个知识记忆混乱的错误,我将五个中断的优先号给记混了,可能是很久没有写单片机程序的原因了,最后还是被发现了,这两个问题花了我大半天的时间,其他程序只要思路框架以及自己的系统设计正确,也就可以很快的写出来。

20、3:主要问题的解决方法 问题1:按键扫描 解决方法:按键扫描在这个程序里面是个非常重要的程序,这里采用的是一个非常经典的按键扫描方法,也是十分的实用与简便,重要的原因是可以检测到按键的短按和长按,并且可以控制非常多程序的切换。 问题2:流水灯的亮度(占空比)控制 解决方法:我开始是用的if语句,通过检测定时器计数来控制流水灯的占空比,到现在都还没有发先我原来的思路有什么不对,由于时间的原因,我不得不采用了另一个方法,通过定时延时来控制,这个延时是有定时器控制的,通过在一个周期里面进行定时器计数从而控制亮度 问题3:知识混乱的问题 解决方法:当你觉的你的思路的是对的,程序运行又没有错误,那就可能是知识记忆错误了,我就犯了这个错误,这个可以查书,上网查,或者问大神。五:结论1:完成的情况及功能 基本功能中按键控制流水灯的刷新频率和亮度已经实现了,但串口通信控制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论