电气控制课程报告

上传人:仙*** 文档编号:82137083 上传时间:2022-04-28 格式:DOC 页数:26 大小:1,021KB
收藏 版权申诉 举报 下载
电气控制课程报告_第1页
第1页 / 共26页
电气控制课程报告_第2页
第2页 / 共26页
电气控制课程报告_第3页
第3页 / 共26页
资源描述:

《电气控制课程报告》由会员分享,可在线阅读,更多相关《电气控制课程报告(26页珍藏版)》请在装配图网上搜索。

1、.附录一3.3电路图3.3.1 整体电路图如下:该电路图主要由STC89C52RC单片机、单片机最小系统上的4*4矩阵键盘和4位八段数码管、用于多机通信的MAX485E芯片以及4位拨码开关。位于电路图最下面的485芯片的7、6引脚接另一系统中485芯片的7、6引脚。精品.附录二:3.3.2 元件明细表 元件数量备注拨码开关1DIP8104电容8105电容8103电容8120欧姆电阻21K欧姆电阻8MAX485ECPA1DIP8封装,maxim 公司的芯片双绞线2米 STC89C52单片机最小系统实验箱1内含数码管、矩阵键盘、发光二极管精品.附录三:系统实现程序清单:Main函数:#includ

2、e typedef.h#include key.h#include display.h#include uart.h#include delay.h#include ModeOne_Send.h#include ModeTwo_Receive.h#define PORT_MODE P0/P0.4-P0.7sbit re_ta=P37;/0:接收;1:发送u8 GetMode(void);void RECEIVE_CODE(void);void M_RECEIVE_CODE(void);volatile u8 MODE;/变量定义void main()精品.EA=0;Variable_Init(

3、);display_init(); UART_init();REN = 1; /串口允许接收EA=0;while( !(MODE=GetMode() )PORT_BYTESEC=0;PORT_SEGSEC=0; EA=1;/开中断while(1) switch(MODE)case 1:re_ta=1;SENE_CODE();delay_ms(100);/单发break;case 2:re_ta=0;RECEIVE_CODE();/单收break;case 3:re_ta=1;M_Send(); MODE=2; / 多发break; 精品.case 4:re_ta=0;M_Receive();

4、/多收 break;default: break; u8 GetMode(void)u8 temp;PORT_MODE|=0xf0;delay_ms(1);temp=PORT_MODE;temp&=0xf0;switch(temp)case 0x70:return 1; /发送break;case 0xb0:return 2; /接收break;case 0xd0: return 3; /单发多收break;case 0xe0:return 4;精品.break;default:return 0;延时模块:#include delay.hvoid delay_ms(u16 ms) u16 i,

5、j; for(i=ms;i0;i-) for(j=110;j0;j-); 显示模块:#include display.h#include delay.h#include reg52.hu8 num4=0;static u8 * numPointer = num;extern volatile u8 Num_Count;void display_init()精品. TMOD = TMOD | 0x01; TH0 = 45536/256; TL0 = 45536%256; EA = 1; ET0 = 1; TR0 = 1;void display(u8 pos,u8 dat) if(pos = 0

6、) num0 = dat; else if(pos = 1) num1 = dat; else if(pos = 2) num2 = dat; else if(pos = 3) num3 = dat;u8 getBDisNum() u8 disNum = num2 * 10 + num3; return disNum;精品.u8 getFDisNum()u8 disNum= num0 *10 + num1;return disNum;void Timer0_Server()interrupt 1 ET0 = 0; TH0 = 45536/256; TL0 = 45536%256; PORT_B

7、YTESEC = PORT_BYTESEC | 0x0f; PORT_SEGSEC = tablenum0; PORT_BYTESEC = PORT_BYTESEC & 0xfe; delay_ms(1); if(Num_Count1) PORT_BYTESEC = PORT_BYTESEC | 0x0f; PORT_SEGSEC = tablenum1; PORT_BYTESEC = PORT_BYTESEC & 0xfd; delay_ms(1); 精品. if(Num_Count2) PORT_BYTESEC = PORT_BYTESEC | 0x0f;PORT_SEGSEC = tab

8、lenum2; PORT_BYTESEC = PORT_BYTESEC & 0xfb; delay_ms(1); if(Num_Count3) PORT_BYTESEC = PORT_BYTESEC | 0x0f; PORT_SEGSEC = tablenum3; PORT_BYTESEC = PORT_BYTESEC & 0xf7; delay_ms(1); ET0 = 1;按键模块:#include key.h#include delay.hsbit sound=P35;/蜂鸣器引脚/*-keyxy : 判定硬件编号精品.输入参数:xx :4位二进制;-*/u8 keyxy(u8 xx)u

9、8 ans;switch(xx)case 0x07:ans=3;break;case 0x0b:ans=2;break;case 0x0d:ans=1;break;case 0x0e:ans=0;break;return ans;/*-lzkeyscan : 矩阵键盘扫描返回值 :0-15-*/u8 lzkeyscan(void)u8 h=10,l=10,s=ERROR,i,j,a,b16;PORT_KEY=0x0f;精品.while(PORT_KEY=0x0f);delay_ms(10);/去抖if(PORT_KEY!=0x0f)h=keyxy(PORT_KEY);PORT_KEY=0xf0

10、;l=keyxy(PORT_KEY/16);s=4*h+l;for(i=0;i200;i+) /让P3.5引脚电平不断取反输出音频 sound=0; a=15; while(a-); sound=1; a=15; while(a-);/延时return s;模式一(即主从机之间单向通信):#include ModeOne_Send.h精品.#include key.h#include uart.hvolatile u8 Num_Count=0;/用户变量extern u8 num4;/外部变量extern u8 slaver_flag;extern u8 rec_flag;void SENE_

11、CODE(void)u8 key; key=lzkeyscan(); +Num_Count;if(Num_Count4) Num_Count=4; switch(key)/矩阵键盘按键数值case 0: movenum(Num_Count); num0=0;break;case 1: movenum(Num_Count);num0=1;break;case 2: movenum(Num_Count);num0=2;break;精品.case 3: movenum(Num_Count);num0=3; break;case 4: movenum(Num_Count);num0=4;break;c

12、ase 5: movenum(Num_Count);num0=5;break;case 6: movenum(Num_Count);num0=6;break;case 7: movenum(Num_Count);num0=7;break;case 12: movenum(Num_Count);num0=8;break;case 13: movenum(Num_Count);num0=9;break;case 15: SendNum();-Num_Count;Variable_Init();break; /发送case 14: Num_Count-=2;backnum(Num_Count);br

13、eak;/退后default: -Num_Count;break;void movenum(u8 num_count)/数码管数字向左移动while(-num_count)numnum_count=numnum_count-1;void backnum(u8 num_count)/删除显示的数字u8 i;精品.for(i=0;inum_count;i+) numi=numi+1;numnum_count=0;void SendNum(void)u8 txbuf;EA=0;txbuf=num1*10+num0;UART_sendChar(txbuf);EA=1;void Variable_Ini

14、t(void)/数码管显示初始化 Num_Count=0;num0=0;num1=0;num2=0;num3=0;rec_flag=0;精品.slaver_flag=0;模式二(即主机与多个从机进行通信):#include ModeTwo_Receive.h#include display.hextern u8 rBuf;extern u8 rec_flag;extern u8 num4;extern volatile u8 Num_Count;void RECEIVE_CODE(void)if(rec_flag) ES=0; /关串口中断if(num1=rBuf/10)Num_Count=2

15、;elseNum_Count=1;num0=rBuf%10;/display(1,rBuf/10);/display(0,rBuf%10);精品.rec_flag=0;ES=1;/开串口中断模式三 (主机指定某从机发送数字给主机)#include ModeThree_MulSend.h#include ModeOne_Send.h#include uart.h#include key.h#include delay.hextern u8 num4;extern volatile u8 Num_Count;void M_Send(void)/发送从机IDu8 key;while(key=lzke

16、yscan()!=12)ChooseSlaver(key);delay_ms(100); UART_sendChar(num0); Variable_Init();精品.void ChooseSlaver(u8 key)/按键选择从机switch(key)case 0: num0=1;break;case 1: num0=2;break;case 15: num0=0;break;/退后default: break; 模式四#include ModeFour_MulReceive.h#include display.h#include uart.h#include delay.hu8 MyID

17、=2;/从机编号,或者为1u8 slaver_flag=0;extern u8 rec_flag;extern u8 rBuf;extern u8 num4;extern volatile u8 Num_Count;精品.extern volatile u8 MODE;sbit TEST=P36;/发光二极管,其亮代表被主机选中void M_Receive(void)/从机2检验是否与自己的ID相同u8 txbuf;if(rec_flag)ES=0; /关串口中断if(rBuf=MyID)TEST=0;Variable_Init();MODE=1;ES=1; /开串口中断通信模块:#inclu

18、de uart.h#include reg52.h#include display.h精品.u8 rBuf = 0;u8 rec_flag=0;void UART_init()/通信接口初始化TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;void UART_sendChar(u8 dat)/发送单个字符 REN = 0; ES = 0; SBUF = dat; while(!TI); TI = 0; ES = 1;精品. REN = 1;void UART_sendStr(u8* str)/发送字符串 u8 inde

19、x = 0; while(*(str+index) != 0) UART_sendChar(*(str+index); index+; u8 UART_getRecBuf() return rBuf;void irq_rec()interrupt 4 /串口接收中断 RI = 0; rBuf = SBUF; rec_flag=1; 显示.h文件:精品.#ifndef _DISPLAY_H#define _DISPLAY_H#include typedef.h#define PORT_BYTESECP0/LED位选#define PORT_SEGSECP2/LED段选static u8 tabl

20、e=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /共阳数码管的0到9数字void display_init(void);void display(u8 pos ,u8 dat);u8 getFDisNum(void);u8 getBDisNum(void);#endif按键.h文件:#ifndef _KEY_H#define _KEY_H#include reg52.h#include typedef.h#define PORT_KEYP1#define ERROR50u8 k

21、eyxy(u8 xx);u8 lzkeyscan(void);精品.#endif延时.h文件;#ifndef _DELAY_H#define _DELAY_H#include reg52.h#include typedef.hvoid delay_ms(u16 ms);#endif附录四:通信模块测试过程:A. 单发单收,在发送状态,能够连续发送从0到99的数字B.单发单收,在接收状态,能够接收数据,并在数码管上正确地显示出来主机拨到1模式,从机2拨到2模式:主机发送88:精品.从机2接收88:发送其它数字亦同。C.单发多收,在AB完成的基础上,接上多个接收设备,能够正确发送和接收主机拨到1模式,从机1和从机2拨到2模式:主机发送数字99:精品.两个从机均接收到数字99:主机发送其它数字亦可以实现。D.设定一个为主站,其余为从站,每次数据传输都由主站发起,即主站请求从站1发送数据,主站接收到,并显示在数码管上,主站再请求从站2发数据,从站2要能发送数据,并且主站要能收到并显示出来。每个站点要在软件中设定站址主机拨到3模式,从机均拨到4模式:主机选中数字1并发送:精品.从机1的发光二极管亮,然后从机1发送数字66给主机:主机接收到数字66:如有侵权请联系告知删除,感谢你们的配合!精品

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!