计算机控制系统设计报告单片机.docx
- 文档编号:5644342
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:26
- 大小:640.06KB
计算机控制系统设计报告单片机.docx
《计算机控制系统设计报告单片机.docx》由会员分享,可在线阅读,更多相关《计算机控制系统设计报告单片机.docx(26页珍藏版)》请在冰豆网上搜索。
计算机控制系统设计报告单片机
《计算机控制系统》
PC-单片机主从控制系统
设计报告
(G5组)驱动设计
姓名:
魏文
学号:
2011132065
指导教师:
范中磊
完成时间:
2011年12月28日
目录
第一章系统概述1
1.1系统功能1
1.2需求分析1
第二章总体设计2
2.1方案选择2
2.2系统结构3
第三章硬件设计5
3.1单片机最小应用系统电路设计5
3.2温度采集模块5
3.3时钟模块6
3.4串口通讯模块7
第四章程序实现9
4.1DS1302时钟程序9
4.2收音机驱动程序11
4.3液晶驱动程序13
4.4DS18B20驱动程序15
4.5串口通讯程序17
第五章测试结果18
5.1设定时间测试18
5.2调频收音机18
5.3温度18
5.4时间掉电保护18
5.5信号波形18
第六章结论19
参考文献:
20
第一章系统概述
1.1系统功能
在PC机与单片机的主从控制系统中,通过单片机与PC机的串行通讯实现指令与数据的传送达到主从控制功能。
本系统主要包含以下功能:
●单片机与pc机串口通讯
●设计友好PC机用户界面
●PC机产生四种信号波(正弦波、三角波、锯齿波、方波),波形、幅值、频率可设置
●单片机驱动调频收音机,PC机可设置收音频率
●设计可调时钟,PC机可读取与设置时间,时钟需有掉电保护
●PC机可采集现场温度
●液晶屏实时显示信号波型、时间、温度、频率等参数
1.2需求分析
根据系统设计要求可知,本系统从结构上可划分为三个部分:
PC机、单片机控制部分、PC-单片机通讯部分。
对于PC机主要完成用户交互界面、信号产生、信号采样、采样数据保存与发送等部分组成,用户界面和信号波形等均可利用MFC编程实现,同时在Windows环境下可利用VisualC++的MSComm控件实现单片机与PC的串行通信。
对于单片机控制系统部分,其主要完成液晶驱动、收音驱动、温度IC驱动、时钟IC驱动等部分,要达到波形显示效果还需选择合适液晶显示器。
第二章总体设计
2.1方案选择
(1)数字时钟
方案一
本方案完全用软件实现数字时钟。
原理是:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。
且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
方案二
本方案采用Dallas公司的专用时钟芯片DS1302。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
基于时钟芯片的上述优点,采用方案二
(2)温度采集部分
方案一
采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于1摄氏度的信号是不适用的。
方案二
采用温度传感器DS18B20。
DS18B20可以满足从-55摄氏度到+125摄氏度测量范围,且DS18B20测量精度高,增值量为0.5摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
基于DS18b20的上述优点,采用方案二。
(3)串口通讯
51单片机串行口采用的是TTL电平,因此必须的有电平转换电路,可以选择1488、1489、MAX232A等芯片。
方案一
采用1488或1489芯片实现电平转换,但在使用中发现这两种芯片可靠性不高,且需要正负12V电源,使用麻烦。
方案二
采用单电源电平转换芯片MAX232A可以使电路变得简单、可靠。
基于以上分析,我们选用方案二。
(4)液晶显示
方案一
选用液晶12864进行显示,分辨率为128*64,显示内容较少,但驱动程序较为简单,波形显示不方便。
方案二
选用2.4寸TFT-LCD彩色屏显示,分辨率为240*320,单页显示内容差不多是12864的10倍。
显示效果好,但驱动程序较复杂。
结合本次设计要求,选用方案二。
(5)上位机用户界面
上位机(PC机)程序由其他组完成。
(6)调频收音模块
方案一
采用RDA5807芯片研发的数字调频收音机模块,主要应用于MP3/MP4媒体播放机,音质更清晰,噪音极少,功耗更低,集成度高,对炬力、瑞芯微、Ali等流行方案都能够很好兼容。
方案二
采用有Philips公司推出的低功耗立体声收音机接收芯片TEA5767,高灵敏、低噪声高频放大器,收音频率:
87.6MHz~108MHz,(支持频率范围在76MHz~87.5MHz之间的校园收音频道),LC调谐振荡器使成本更低,RFAGC电路,内置调频中频选择,I2C总线控制,内置FM立体声解调器,PLL合成调谐解码器。
结合系统要求,采用方案二。
2.2系统结构
本系统采用STC90C516作为主控制器,整个电路主要由单片机及其接口电路、液晶驱动电路、电源电路、收音机、温度采集等部分组成。
单片机将由DS18B20、DS1302读取的数据进行处理,在驱动液晶显示模块,实现温度、日历的显示;单片机初始化收音机模块,同时通过与PC机串口通讯实现上位机调整频率、采集温度、设置时间、读取时间等控制;上位机产生的模拟波形数据通讯串口传输到单片机,单片机对数据进行处理然后驱动液晶显示出波形。
系统总体框图如图2-1所示。
图2-1系统结构框图
第三章硬件设计
3.1单片机最小应用系统电路设计
单片机最小应用系统包括晶体振荡电路、复位开关和电源部分。
图3-1为STC90C516单片机的最小应用系统电路。
图3-1STC90C516单片机最小应用系统电路
3.2温度采集模块
温度测量采用DALLAS公司DS18B20的单总线数字化温度传感器,其测温范围为-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。
DS18b20引脚图如图3-2所示,其接口电路如图3-3所示。
图3-2DS18b20引脚图图3-3DS18b20接口电路
3.3时钟模块
时钟模块采用DS1302涓流充电时钟保持芯片,DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。
DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:
(1)RES(复位),
(2)I/O(数据线),(3)SCLK(串行时钟)。
时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。
DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
图3-5DS1302管脚排列及描述
DS1302引脚的功能:
ØVcc1:
主电源;
ØVcc2:
备份电源。
当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 ØSCLK: 串行时钟,输入,控制数据的输入与输出; ØI/O: 三线接口时的双向数据线; ØCE: 输入信号,在读、写数据期间,必须为高。 该引脚有两个功能: 第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 DS1302内部寄存器: ØCH: 时钟停止位CH=0振荡器工作允许,CH=1振荡器停止 Ø寄存器2的第7位12/24小时标志bit7=0,24小时模式,bit7=1,12小时模式 Ø寄存器2的第5位: AM/PM定义AP=0上午模式,AP=1下午模式 ØWP: 写保护位WP=0寄存器数据能够写入,WP=1寄存器数据不能写入 ØTCS: 涓流充电选择TCS=1010使能涓流充电,TCS=其它禁止涓流充电 ØDS: 二极管选择位DS=01选择一个二极管,DS=10选择两个二极管,DS=00或11,即使TCS=1010,充电功能也被禁止 DS1302内部寄存器详细说明如图3-6 图3-6DS1302内部寄存器 DS1302接口电路图如图3-7所示 图3-7DS1302接口电路 3.4串口通讯模块 51单片机含有一个全双工串行通讯接口,利用这个接口,可实现单片机与PC机串行通讯,不仅可以将单片机采集的实时数据传输到上位机,还可以接收上位机对单片机的控制指令,实现对单片机的智能化控制。 在本设计中采用RS-232C总线进行与PC机通讯。 电平转换采用MAX232实现,其引脚图如图3-8,其外部接口连接如图3-9。 图3-8MAX232引脚图 图3-9PC串行通讯电路 第四章程序实现 在讲述程序实现时,为方便介绍各个模块的驱动实现,附上了部分源程序代码。 4.1DS1302时钟程序 DS1302采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。 (1)在程序设计时,先对SPI三线接口进行管教定义 sbitSCK=P3^6;//时钟 sbitSDA=P3^4;//数据 sbitRST=P3^5;//DS1302复位 (2)DS1302写入一个字节 voidWrite_Ds1302_Byte(unsignedchartemp) { unsignedchari; for(i=0;i<8;i++)//循环8次写入数据 { SCK=0; SDA=temp&0x01;//每次传输低字节 temp>>=1;//右移一位 SCK=1;//时钟信号 } } (3)DS1302寄存器控制 voidWrite_Ds1302(unsignedcharaddress,unsignedchardat) { RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_();//启动 Write_Ds1302_Byte(address);//发送地址 Write_Ds1302_Byte(dat);//发送数据 RST=0;//恢复 } (4)设定时钟 voidSet_RTC(void) { unsignedchari,*p,tmp; for(i=0;i<7;i++) {//BCD处理 tmp=l_tmpdate[i]/10; l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_Ds1302(0x8E,0X00); p=write_rtc_address;//传地址 for(i=0;i<7;i++)//7次写入秒分时日月周年 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0x8E,0x80); } (5)读取时间 voidRead_RTC(void) { unsignedchari,*p; p=read_rtc_address;//地址寄存器 for(i=0;i<7;i++)//分7次读取秒、分、时、日、月、周、年 { D[i]=Read_Ds1302(*p); p++; } } 4.2收音机驱动程序 收音机驱动程序主要包含两部分: PLL值与频率转化,设定频率。 (1)PLL值与频率转化 voidget_pll(void)//由频率计算PLL { unsignedcharhlsi; unsignedinttwpll=0; hlsi=radio_write_data[2]&0x10; if(hlsi) pll=(unsignedint)((float)((frequency+225)*4)/(float)32.768);//频率单位: k else pll=(unsignedint)((float)((frequency-225)*4)/(float)32.768);//频率单位: k } voidget_frequency(void)//将PLL转化为频率 { unsignedcharhlsi; unsignedintnpll=0; npll=pll; hlsi=radio_write_data[2]&0x10; if(hlsi) frequency=(unsignedlong)((float)(npll)*(float)8.192-225);//频率单位: KHz else frequency=(unsignedlong)((float)(npll)*(float)8.192+225);//频率单位: KHz } //读TEA5767状态 voidradio_read(void) { unsignedchari; unsignedchartemp_l,temp_h; pll=0; iic_start();//IIC通讯初始化 iic_write8bit(0xc1);//TEA5767读地址 if(! iic_testack()) { for(i=0;i<5;i++) { radio_read_data[i]=iic_read8bit(); iic_ack(); } } iic_stop(); temp_l=radio_read_data[1]; temp_h=radio_read_data[0]; temp_h&=0x3f; pll=temp_h*256+temp_l; get_frequency(); } (2)设置频率 voidsearch(bitmode) { radio_read(); if(mode) { frequency+=100; if(frequency>max_freq)//将设置的频率与最高频率对比 frequency=min_freq; } else { frequency-=100; if(frequency frequency=max_freq; } get_pll();//获得PLL值 radio_write_data[0]=pll/256;//写入频率 radio_write_data[1]=pll%256; radio_write_data[2]=0x41; radio_write_data[3]=0x11; radio_write_data[4]=0x40; radio_write(); } 4.3液晶驱动程序 TFTLCD液晶驱动原理,每个点用2个字节表示颜色,只要写入相应点寄存器杰克完成字符或者图片的显示。 在显示之前须对液晶控制器进行初始化,然后设定相应坐标显示字符或者图形。 (1)显示汉字 voidChineseChar(uintx,uinty,intsize,uintFor_color,uintBk_color,charc) { inte=0,i,j; inted; uintncols; uintnrows; uintnbytes; uchar*pfont; uchar*pchar; uchar*fonttable[]={(uchar*)hz16,(uchar*)hz24,(uchar*)hz32}; pfont=(uchar*)fonttable[size];//hz**代表文本字体大小 if(size==0) { ncols=16-1; nrows=16-1; nbytes=32;//每个字取模的字节数=(16*16)/8 } else if(size==1) { ncols=21-1; nrows=24-1; nbytes=63;//每个字取模的字节数=(24*24)/8 } else if(size==2) { ncols=32-1; nrows=32-1; nbytes=132;//每个字取模的字节数=(32*32)/8 } pchar=pfont+(nbytes*(c-1)); Address_set(x,y,x+nrows,y+ncols); for(i=0;i { ed=*pchar++; if(size==0) { if(i%2==0) e=8; else e=4; } else e=8; for(j=0;j { if((ed>>j)&0x01) { LCD_Write_DATA(For_color>>8,For_color);//文本颜色 } else { LCD_Write_DATA(Bk_color>>8,Bk_color);//背景颜色 } } } } (2)显示字符 voidLCD_ShowChar(uintx,uinty,uintFor_color,uintBk_color,charch) { uchartemp,Bytes; ucharpos,t; uintCHAR_W,CHAR_H; CHAR_W=16;//16*24 CHAR_H=24; if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H)) return; Address_set(x,y,x+CHAR_W-1,y+CHAR_H-1);//设置显示地址 ch=ch-32;//按照ASCII编码顺序的到相应字母的编码 Bytes=(CHAR_W*CHAR_H)/8;//每个字母取模字节数 for(pos=0;pos { temp=Font16x24[ch][pos];//16是字体的宽度 for(t=0;t<8;t++) { if(temp&0x80) LCD_Write_DATA(For_color>>8,For_color);//字符颜色 else LCD_Write_DATA(Bk_color>>8,Bk_color);//背景颜色 temp<<=1; } } } (3)设置显示坐标 voidAddress_set(unsignedintx1,unsignedinty1,unsignedintx2,unsignedinty2) { LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);//设置X坐标位置 LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);//设置Y坐标位置 LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1);//开始X LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1);//开始Y LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2);//结束X LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);//结束Y LCD_Write_COM(0x00,0x22); } 4.4DS18B20驱动程序 (1)复位: 首先对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20 单总线至少480uS的低电平信号。 当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。 (2)存在脉冲: 在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。 sbitD18B20=P3^7; voidInit18b20(void) { D18B20=1; _nop_(); D18B20=0; TempDelay(80);//延时 _nop_(); D18B20=1; TempDelay(14);//延时 _nop_(); _nop_(); _nop_(); if(D18B20==0) flag=1;//初始化成功 else flag=0;//初始化失败 TempDelay(20); _nop_(); _nop_(); D18B20=1; } (3)控制器发送ROM指令: ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。 ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。 (4)控制器发送存储器操作指令: 在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。 操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。 voidConfig18b20(void)//重新配置报警限定值和分辨率 { Init18b20(); WriteByte(0xcc); WriteByte(0x4e); WriteByte(0x19);//上限 WriteByte(0x1a);//下限 WriteByte(0x7f); Ini
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 系统 设计 报告 单片机
![提示](https://static.bdocx.com/images/bang_tan.gif)