单片机课程设计评分系统_第1页
单片机课程设计评分系统_第2页
单片机课程设计评分系统_第3页
单片机课程设计评分系统_第4页
单片机课程设计评分系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、河南理工大学计算机科学与技术学院课程设计报告200 9 200 10 学年第 一 学期课程名称 单片机原理与应用实例仿真 设计题目 评分系统 学生姓名 xxx 学 号 310709010208 专业班级 计算机07-2班 指导教师 xxx 2009 年 12 月 30 日 评分系统一 、设计要求:(1) 题目要求四个评委给出自己的打分,故设计的第一步设计主机信号控制指令,否则任何打分都是无效。(2) 评委们接到打分指令后即可为选手输入分数,先设想用可编程编程并行通信接口89c52与 开关结合实现该步。(3) 接收所有评委的打分到指定缓冲区后,开始对数据进行处理,求出平均分:(4) 将(3)步取

2、出的平均分显示出来。 二 、设计目的:通过课程设计及研究论文,使学生对单片机的应用有更深入的理解,并具有较简单的单片机应用的设计能力。三 、设计方案: 评分系统需使用单片机多机通信系统。一个主机 ,五个从机。主机向从机发送的地址帧和数据帧用相应的标志位加以区分从机。当主机选中与其通信的从机后,只有该从机能够与主机通信,其他从机不能与主机进行数据交换,而只能准备接受主机发来的地址帧。主从通信是通过scon中的sm2和tb8来实现的,串行口以方式2或3接收时,若sm2为1,则仅当接受到第9位数据rb8为1时,数据才装入sbuf,置位ri,请求cpu对数据进行处理;如果接收到第9位数据rb8为0,则

3、ri不置1,接收到数据丢失;若sm2为0时。则接收到一个数据后,不管第9位数据rb8是0还是1,都将数据装入接收缓冲器sbuf并置位中断标志ri,请求cpu处理。利用这个特点,当主机发送地址帧时使tb8=1,发送数据帧时使tb8=0,tb8是发送的一帧数据实地还是数据。主从式多级通信系统模型如下。 txd rxd 主机rxd txd n号从机rxd txd 2号从机rxd txd 1号从机 通信过程可以按照以下步骤进行:(1) 所有的从机的sma置1,以接收地址帧。(2) 主机发地址帧。其中包含8位从机地址,置tb8=1装入第9位,选中所要通信的从机。(3) 所有从机接收到地址帧后,将接收到地

4、址与本机地址比较,相符的从机,使sm2置0(已接受随后的数据帧),不符的从机,保持sm2=1,对主机随后发来的数据帧不予理睬,直至发送新的地址帧。(4) 主机收到被选中的从机回送的地址信号后,对该从机发送控制命令(此时置tb8=0),说明主机要求从机发送还是接收。(5) 从机收到主机控制命令后,向主机发送一个状态信息,表明是否已准备就绪。主机收到从机的状态信息,若从机准备就绪,主机便与从机进行数据传送。 用到六个芯片中主机控制和管理从机通信,四个从机是评委,主要是输入数据。输入顺序由主机控制,待从机得分输入完毕 。主机发送信号启动最后一个从机,最后一从机计算四个评委的得分的平均值不能够显示出来

5、。四 、硬件设计:本设计主要用到以下几个硬件设施:(1)at89c52: 单片机; (2)led green;(3)switch: 开关; (4)7sec com an blue; (5)共阳一位蓝色数码管; (6)button: 按键; (7)res: 电阻; (8)crystal:晶振; (9)cap 、cap elec: 电容 、电解电容。设计要求中开始信号有主机单片机上的开关实现。评委可通过很多设备进行数据输入,本设计用逻辑开关实现。输出设备即可用发光二极管也可用led显示器,但相对于前者,后者对结果的显示一目了然,故本设计设计选择led显示器作输出设备。本设计的四个评委的输入设备需要

6、四个89c52芯片,还需要四个显示器,电阻及导线若干。本设计的四个输入物理模型如下:xtal1 p0.0/ad0xtal2 。rst .。 p0.7/ad7psen p2.0/a8ale 。ea .。 p27/a15p1.0/t2 p1.1/t2ex p3.0/rxd 。 p3.1/txd 。 。 。 。p1.7 p3.7/rd 显 示 器主机控制模型如下:xtal1 p0.0/ad0xtal2 。 。rst p0.7/ad7 p2.0/a8psen 。ale 。ea p2.7/a15p1.0/t2 p3.0/rxd 。 p3.1/txd 。 。p1.7 p3.7/rd逻辑开关输入设备resp

7、ackb 物理模型原理图:主 机评委1从机1评委2从机2评委3从机3评委4从机4打分显示器打分显示器打分显示器打分显示器平均分计算控制器平均分显示器逻辑开关设备五 、软件分析(1)从机原理子机开始时p2口为0x00,数码管显示00,当有一次按键按下时,判断按键是否为复位键,如果不是复位键,则查表得出所按按键的键值,将此键值作为个位数显示在数码管上;当第二次按下按键时,判断是否为复位键,若不是,则将p2口的数据左移4位,与新键值相或后显示在数码管上,此时数码管上显示r十位数和个位数,接下来h有按下复位键后,数码管才会清零,可重新输入数字。否则,数码管上数字不再改变,等待与主机进行通信。当主机通过

8、串口发送手机的地址码后,如0x01,子机通过中断串口接收并判断是否为自己的地址码,如果不是,则跳出中断,继续等待。如果是自己的地址码,则通过串口上传自己p2口的数据。如果中断串口接收到的命令是0xff。则进行复位。(2)主机原理当主机按下取值键后,通过串口发送l号子机的地址码,然后处于接受状态,等待l号千机发送数据,接收完毕后,将数据存放在数组中。接着发送2号子机的地址码,以此类推,等所有的子机数据都收集完毕后,算出平均分,然后开始与屏幕机进行并行通信。当主机按下复位键后,主机通过串口发送oxfi,并将手机中的相关数组初始化,等待下一轮评分源程序清单及注释:发送数据文件定义:#ifndef_s

9、end_data_h / 防止pmpdatat.h被重复引用#define_send_data_h#include <reg52.h>/#include <string.h>#define uchar unsigned char#define uint unsigned int/* 握手信号宏定义 */#define succ 0x2a/ 接收成功#define err 0xf0/ 接收错误#define maxlen 64 / 缓冲区最大长度uchar buf;uchar addr,get_key,key;#endif主机发送程序:#include "sen

10、d_data.h"/* 延时t毫秒*/void delay(uint t)/ 对于11.0592m时钟,约延时1msuint i;while(t-)for (i=0;i<125;i+);/*键盘扫描*/uchar keyscan(void)uchar scancode,tmpcode;p1 = 0xf0; / 发全0行扫描码if (p1&0xf0)!=0xf0)/ 若有键按下delay(10);/ 延时去抖动if (p1&0xf0)!=0xf0)/ 延时后再判断一次,去除抖动影响scancode = 0xfe;while(scancode&0x10)!=

11、0)/ 逐行扫描p1 = scancode;/ 输出行扫描码if (p1&0xf0)!=0xf0)/ 本行有键按下tmpcode = (p1&0xf0)|0x0f;return(scancode)+(tmpcode);/ 返回特征字节码,为1的位即对应于行和列else scancode = (scancode<<1)|0x01;/ 行扫描码左移一位return(0);/ 无键按下,返回值为0/*发送数据函数*/void senddata(uchar buf)ti = 0;tb8 = 0;/ 发送数据帧sbuf =buf;while(!ti);ti = 0;/*串口初

12、始化函数*/void init()tmod =0x20; / 定时器t1使用工作方式2th1 = 250;tl1 = 250;tr1 = 1;/ 开始计时pcon = 0x80;/ smod = 1scon = 0xd0;/ 工作方式,9位数据位,波特率9600kbit/s,允许接收changkey(uchar buf)switch(buf) case 0xc0: return (0); case 0xf9: return (1); case 0xa4: return (2); case 0xb0: return (3); case 0x99: return (4); case 0x92: r

13、eturn (5); case 0x82: return (6); case 0xf8: return (7); case 0x80: return (8); case 0x90: return (9); case 0x88: return (10); void getkey() switch(get_key) case 0x11:/ 1行1列,数字0 key=0xc0; break;case 0x21:/ 1行2列,数字1 key=0xf9;break;case 0x41:/ 1行3列,数字2key=0xa4;break; case 0x81:/ 1行4列,数字3key=0xb0;break

14、;case 0x12:/ 2行1列,数字4 key=0x99;break;case 0x22:/ 2行2列,数字5 key=0x92;break;case 0x42:/ 2行3列,数字6 key=0x82;break;case 0x82:/ 2行4列,数字7 key=0xf8;break;case 0x14:/ 3行1列,数字8 key=0x80; break;case 0x24:/ 3行2列,数字9 key=0x90;break;case 0x44:/ 3行3列,10 key=0x88;break;case 0x84:/ 3行4列,11 key=0x83;break;case 0x18:/

15、4行1列,12 key=0xc6;break;case 0x28:/ 4行2列,13 key=0xa1;break;case 0x48:/ 4行3列,14 key=0x86;break;case 0x88:/ 3行4列,15 key=0x8e;break;default:break;/*主程序*/void main() code unsigned char ledcode= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88 ; int a=0,b=0,c=0,d=0,num=0;uchar sum=0;uchar i = 0;key=

16、0xc0;while(1) get_key = keyscan();/ 调用键盘扫描函数 getkey(); buf=key; p0 = 0xff;/ 通过p0口读要访问的从机地址 addr = p0&0x0f; init(); / 串口初始化 ea = 1;/ 关闭所有中断 ti = 0; tb8 = 1; / 发送地址帧 sbuf = addr; while(!ti); ti = 0; senddata(buf); switch(addr) case 0x0e: a=changkey(buf); break; case 0x0d: b=changkey(buf); break; c

17、ase 0x0b: c=changkey(buf); break; case 0x07: d=changkey(buf); break; num=(a+b+c+d)/4; sum=ledcodenum; if(p27=0) senddata(sum); / 发送数据接收数据文件定义:#ifndef_receive_data_h / 防止receive_data.h被重复引用#define_receive_data_h#include <reg52.h>/#include <string.h>#define uchar unsigned char#define uint

18、unsigned int/* 握手信号宏定义 */#define succ 0x2a/ 接收成功/#define err 0xf0/ 接收错误/#define maxlen 64 / 缓冲区最大长度uchar buf;uchar addr;sbit p23 = p23;/ 此引脚控制发光管#endif接收数据程序如下:#include "receive_data.h"/* 延时t毫秒 */void delay(uint t)uint i;while(t-)for (i=0;i<125;i+)/* 对于11.0592m时钟,约延时1ms */ /* 接收数据函数 */u

19、char recvdata()while(!ri);if (rb8=1)return 0xee;/ 若接收的为地址帧,则返回0xeebuf = sbuf;ri = 0;return 0;/ 返回0/*串口初始化函数 */void init()tmod = 0x20;/ 定时器t1使用工作方式2th1 = 250;tl1 = 250;tr1 = 1;/ 开始计时pcon = 0x80;/ smod = 1scon = 0xd0;/ 工作方式,9位数据位,波特率9600kbit/s,允许接收 /* 主程序*/void main() uchar i = 0;uchar tmp = 0xff;p1=

20、0xff;addr = p1&0x0f;/ 获取本机地址p23 = 1;/ 发光管不亮init(); / 串口初始化 ea = 1;/ 关闭所有中断while(1)/ 进入设备应答 sm2 = 1;/ 只接收地址帧while (tmp!=addr) / 如果接收到的地址帧不是本机地址,则继续等待ri = 0;while(!ri)tmp = sbuf;ri = 0;sm2 = 0;/允许接收数据tmp= recvdata();/数据接收 if (tmp=0x00) p0=buf; p23 = 0;/绿灯亮,持续500ms,表示接收数据成功delay(30);p23 = 1; / 如果接收数据时发现地址帧则重新开始整个收 程序流程图:开始串行口初始化发送地址帧ffh,是从机复位sm2=1发送地址帧ffh,是从机复位sm2=1发送地址帧n从机应答否y应答地址相符ytb8清零发送命令帧接收从机状态n从机状态正常yn命令分类nn从机接收就绪从机发送

温馨提示

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

最新文档

评论

0/150

提交评论