电子综合实习报告.docx
- 文档编号:17812590
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:21
- 大小:503.21KB
电子综合实习报告.docx
《电子综合实习报告.docx》由会员分享,可在线阅读,更多相关《电子综合实习报告.docx(21页珍藏版)》请在冰点文库上搜索。
电子综合实习报告
重庆大学本科学生课程设计指导教师评定成绩表
学号
20085208
指导教师
黄扬帆
学院
自动化学院
专业
自动化
学生姓名
王诗年、陈宇、冉宇、常洋
课程设计
题目
单片机双机通信系统
指
导
教
师
评
语
课程设计
成绩
指导教师签名:
年月日
说明:
1、学院、专业、年级均填全称。
2、本表除评语、成绩和签名外均可采用计算机打印。
重庆大学本科学生课程设计任务书
课程设计题目
单片机双机通信系统
学院
自动化
专业
自动化
年级、班
08级自动化一班
设计要求:
1.基本要求:
设计两个单片机最小系统,能实现有线通信,一方为发射,另一方为接收。
2.提高要求:
两个单片机最小系统能相互通信,并能实现校验。
学生应完成的工作:
设计基本方案,完成软件设计,设计电路图,线路板布线,电路焊接,软件仿真,硬件调试,得到最后成果.
参考资料:
课程设计工作计划:
第一周,接受设计任务书,设计基本方案,完成电路图;第二周,完成电路板布线以及焊接,同时编写软件程序;第三周,烧录程序,硬件调试,得到最后成果.
任务下达日期2011年2月21日完成日期2011年3月11日
指导教师黄扬帆(签名)学生王诗年、陈宇、冉宇、常洋(签名)
说明:
1、学院、专业、年级均填全称。
2、本表除签名外均可采用计算机打印。
本表不够,可另附页,但应在页脚添加页码。
电子综合实习报告书
----单片机双机通信系统的设计
一、引言
由于MCS51系列单片机具有性能稳定、工作可靠、价格低廉等特点,因此其应用相当广泛。
一个MCS51系列的单片机(如Atmel89c51)内部包含有RAM、FLASHROM、两个或者三个16位的定时器/计数器、一个通用异步串行通信控制器(UART)等多种资源。
但即便如此,在一些相对复杂的单片机应用系统中,仅仅一个单片机资源还是不够的,因此而常常需要扩充I/O接口、定时器/计数器、串行通信接口、RAM、ROM等。
采用通用的标准器件进行扩充是通常的做法,但将单片机本身作为一个通用的扩充器件来使用,也不失为一个好的方法。
在这种情况下,一个系统中就使用了两个或两个以上的单片机,而单片机之间就要通过互连来进行数据通信。
MCS51系列的单片机(以下简称单片机)都带有串口,利用串口进行互连通信极为方便,其各种连接方式在许多书籍和资料上都有介绍,在此不再重述。
但如果系统要求扩充的资源是对外连接的串口,或对相互之间的数据传送有一定的速度要求,则单片机的串口就不能用作系统内两单片机的通信接口了。
所幸的是,单片机的并行端口也能相互连接来进行数据通信。
根据单片机端口内部结构的特点,这些端口的端口线可以直接相连,从而使两单片机之间并行通信接口的实现不用另外的硬件电路设备。
此次设计就是针对上述情况展开的。
系统结构框图如图
(1)所示。
二、键盘设计
1、硬件接线部分
考虑到此次设计要求用到的按键数比较多(0~9,A~F共16个按键),为了节约I/O资源,采用行列式键盘,如图
(2)所示
图
(2)
按键编排如图(3)所示
图(3)
2、4×4矩阵键盘识别处理
按键设置在行列式交点上,行列线分别连接到按键开关的两端。
当行线通过上拉电阻接+5伏时,被钳位在高电平状态,事先认为设定好行线和列线的序号。
此处设行号为i,从上到下编为0-3对应于p1.0-p1.3口,列线设为j,从左到右编为0-3对应于p1.4-p1.7口。
每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。
事先有数组存放好对应键值的段选码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
3、键盘识别处理程序
键盘识别程序如下:
voidscanf(void)/*键盘扫描子程序*/
{
uchari,j,k=0;/*i为行号,j为列号*/
unsignedcharnum[4][4]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x84};
/*采用共阳极输出*/
while
(1)
{
for(k=0;k<8;k++)/*循环8次,取得8个键盘键值*/
{/*存入TAB[]数组*/
P1=0x0F;
delay();/*软件延时去抖动*/
if((P1&0x0F)!
=0x0F)
{
switch(P1)/*确定行号*/
{
case0x07:
i=3;break;
case0x0b:
i=2;break;
case0x0d:
i=1;break;
case0x0e:
i=0;break;
default:
break;
}
}
P1=0xF0;//反转行和列上的电平
if((P1&0xF0)!
=0xF0)
{
switch(P1)/*确定列号*/
{
case0x70:
j=3;break;
case0xb0:
j=2;break;
case0xd0:
j=1;break;
case0xe0:
j=0;break;
default:
break;
}
TAB[k]=num[j][i];/*P1输出对应的按键值*/
}
}
}
三、数码管显示设计
1、数码管显示工作原理
七段LED显示器但是最常用的显示器件。
它是由7个LED二极管组成。
图(4)七段LED图
八位LED动态显示电路只需要两个8位I/O口。
其中一个控制段选码,另一个控制位选。
要想每位显示不同的字符,必须利用人的视觉暂留,采用扫描方式。
数码管显示部分硬件接线如图(5)所示
图(5)
四、单片机的选择及其连接
1、单片机型号的选择
单片机选用两片Atmel公司的常用芯片AT89C51,一片用于接收键盘的输入并做出判断,一片用于接收数据并驱动8个七段数码管实现动态显示。
AT89C51完全可以满足功能要求,而且价格便宜,容易获得。
2、协议设计
规定协议内容如下:
数据传输的双方均使用2400bps的速率传送数据,使用主从通信方式,主机发送数据,从机接收数据,双方在发送数据和接收数据时使用查询方式。
(此处设计甲机发送,乙机接收)
双方开始数据传输时,甲机先发送AAH给乙机,当乙机接收到AAH之后,向甲机回答BBH。
甲机收到BBH后就把数码表TAB[8]中的8个数据发送给乙机,并发送校验和。
乙机收到8个数据并计算收到的数据的校验和,与甲机发送过来的校验和进行比较,若校验和相同(正确)则发送00H给甲机;否则发送FFH(错误)甲机,重新接收。
乙机接收到8个数据后送8个数码管动态显示。
3、双机电路如图所示
图(6)
五、总体电路图及程序设计
#include"reg51.h"
#defineucharunsignedchar
//时钟频率11.0592MHz,每秒钟921600个时钟周期,
sfrPSEG=0x80;
sfrPNUM=0xA0;
charLEDNow=0;
bitsuccess=1;
charkeystate;//上一次中断结束时键盘的状态,keystate/4>15表示无键按下
//否则,商表示按键编号,余数表示状态
//0表示检测到按下,等待去抖动
//1表示已经响应过事件,等待弹起
//2表示已经弹起,等待再次去抖动
//3未定义
charnum[8];
charcodenumcode[16]={0xf3,0x42,0xe9,0x6b,0x5a,0x3b,0xbb,0x62,0xfb,0x7b,0xfa,0x9b,0xb1,0xcb,0xb9,0xb8};
sbitACC0=ACC^0;
sbitACC1=ACC^1;
sbitACC2=ACC^2;
sbitACC3=ACC^3;
sbitACC4=ACC^4;
sbitACC5=ACC^5;
sbitACC6=ACC^6;
sbitACC7=ACC^7;
sbitB0=B^0;
sbitB1=B^1;
sbitB2=B^2;
sbitB3=B^3;
sbitB4=B^4;
sbitB5=B^5;
sbitB6=B^6;
sbitB7=B^7;
ucharHammingCode(uchardat)reentrant
{
chara[8];
chari,j;
a[3]=dat&1;
dat>>=1;
a[5]=dat&1;
dat>>=1;
a[6]=dat&1;
dat>>=1;
a[7]=dat&1;
dat>>=1;
for(i=1;i<8;i<<=1){
a[i]=0;
for(j=1;j<8;++j)
if(i&j!
=0&&i!
=j)
a[i]^=a[j];
}
dat=0;
a[0]=0;
for(i=7;i>0;i-=1){
a[0]^=a[i];
dat=(dat<<1)+a[i];
}
dat=(dat<<1)+a[0];
returndat;
}
charHammingDecode(uchardat)
//返回值>0则表示解码成功且正确结果为返回值,否则返回-1
{
chari,j;
chara[8];
for(i=0;i<8;++i){
a[i]=dat&1;
dat>>=1;
}
for(i=1;i<8;++i)
a[0]&=a[i];
if(a[0]!
=0)
return-1;
for(i=1;i<8;i<<=1){
for(j=1;j<8;++j)
if(i&j!
=0&&i!
=j)
a[i]^=a[j];
if(a[i]!
=0)
return-1;
}
return(((a[7]*2+a[6])*2+a[5])*2+a[3]);
}
voidOnDataError()
{
TB8=1;
SBUF=0xff;
}
voidSend(chardat)
{
success=0;
TB8=0;
SBUF=HammingCode(dat);
}
voidOnRecv(uchardat,bitex)
{
if(ex==0){
dat=HammingDecode(dat);
if(dat!
=-1){
num[1]=dat;
TB8=1;
SBUF=0;
}
else
OnDataError();
}
else{
if(dat==0){
success=1;
}else{
Send(num[0]);
}
}
}
voidOnKeyPress(charkey)
{
num[0]=key;
Send(key);
}
voidProgT0()interrupt1
{
charprekey,prestate,row,col,press;
TR0=0;//关闭计时器
PNUM=~(1<<(LEDNow+6));
PSEG=numcode[num[LEDNow]];
LEDNow=(LEDNow+1)%2;//扫描显示数码管
if(!
success)
Send(num[0]);//若未发送成功则重新发送一次数据
prekey=keystate/4;
prestate=keystate%4;
if(prekey<16){
row=prekey%4;
col=prekey/4;
P1=0xff;
P1&=~(1<<(row));
press=!
(P1&(1<<(4+col)));
switch(prestate){
case0:
if(press){
keystate++;
OnKeyPress(prekey);
}else{
keystate=100;
}
break;
case1:
if(!
press){
keystate++;
}
break;
case2:
keystate=100;
break;
default:
break;
}
}else{
P1=0xff;
P1&=0x0f;
for(row=0;row<4;++row){
if(!
(P1&(1< break;//此行有键按下 } if(row<4){ P1=0xff; P1&=~(1< for(col=0;col<4;++col){ if(! (P1&(1<<(col+4)))) break;//此列有键按下 } if(col<4){ keystate=(row+4*col)*4; } } } //再次开启计时器 TH0=0xf9;//0xED; TL0=0xc0;//0x40; TR0=1; } voidProgS()interrupt4 { if(RI){ OnRecv(SBUF,RB8); RI=0; } } voidmain() { chari; TMOD=0x29;//设置计数器工作模式 EA=1; ET0=1;//开启中断 TH0=0xf9;//0xED; TL0=0xc0;//0x40;//计数初值 TR0=1;//开启计数器 for(i=0;i<2;++i) num[i]=0;//初始数码管显示0000 SCON=0xd0;//初始化串口 TH1=0xFD; TL1=0xFD; TR1=1; ES=1; RI=TI=0; while (1); } 六、设计小结 我觉得做电子综合实习之于单片机课程设计是十分有意义的,而且是十分必要的。 在已度过的大学时间里,我们大多数接触的是专业课。 我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力? 如何把我们所学的专业基础课理论知识运用到实践中去呢? 我想做类似的课程设计就为我们提供了良好的实践平台。 在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了,无论是课本上的还是网上的都浏览了不少相关的程序,从中也借鉴了别人的思想,开阔了自己的思路。 做电子综合课程设计,对设计者的软硬件的理解和掌握的要求都比较高。 在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。 回顾这一周以来自己从接到题目到编写出程序、画出电路原理图,自己真的收获不少。 无论是软件的使用还是对单片机内部资源的了解,自己的认识都加深了很多。 另外,这次课程设计让我感到了团队合作的重要性。 在团队中,我们互帮互助,对整个课程设计来说,这是至关重要的,缺少每一个人都会对我们的设计产生影响。 还有要感谢指导老师在我们遇到困难时,给予我们的建议与鼓励! 七、参考文献 1,单片机接口技术(C51版)张道德编著水利水电出版社 2.单片微型计算机原理及接口技术杨光友朱宏辉主编水利水电出版社 3.51单片机C语言应用程序设计实例精讲戴佳戴卫恒编著电子工业出版社 4.单片机语言C51典型应用设计刘文涛编著人民邮电出版社 5.μVision2单片机应用程序开发指南尹勇李宇编著科学出版社 6.单片机控制实习与专题制作蔡朝洋编著北京航天航空大学出版社 附录 1、元件清单 综合设计元器件清单 元件名称 .需要数量 元件名称 需要数量 电容20p 4 电容10Uf/16v 2 三极管 16 5v蜂鸣器 2 数码管 4 弹簧按键 34 电阻10k 18 电阻470 16 晶振11.0592 2 89c51单片机 2 译码器 4 导线 若干 实验板: 2 工具: 烙铁 1 镊子 1 领用人签字: 斜口钳 1 小起子 1 领用时间: 指导教师签字: 2、原理图 3、布线图 4、实物图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 综合 实习 报告