单片机课程设计-智能仪器
- 格式:doc
- 大小:271.00 KB
- 文档页数:19
摘要随着时代的进步和发展,智能仪表已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于89C51单片机的温度报警系统,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和模数转换,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
AT89C51与ADC0808结合实现最简温度报警系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
关键词:温度报警;ADC0808;AT89C51目录1 智能仪器仪表的简介 (2)1.1智能仪器仪表简介 (2)1.2智能仪器仪表的作用 (2)1.3本课题的背景和意义 (3)2 系统设计简介 (4)2.1 芯片简介 (4)2.2 设计要求 (4)2.3 设计方案论证 (4)2.4 硬件设计电路 (5)3 系统硬件设计 (6)3.1控制模块 (6)3.2显示电路 (6)3.3转换模块 (7)3.4报警模块 (7)3.5系统总体电路图 (8)4 设计语言及软件介绍 (9)4.1 keil语言介绍 (9)4.2 Proteus软件介绍 (9)4.3 keil与proteus联调与仿真实现 (10)5 系统软件设计 (11)5.1 程序设计思路 (11)5.2源程序 (12)5.3 调试及仿真 (17)6 结论 (18)7 参考文献 (18)1 智能仪器仪表的简介1.1智能仪器仪表简介仪器仪表(英文:instrumentation)仪器仪表是用以检出、测量、观察、计算各种物理量、物质成分、物性参数等的器具或设备。
真空检漏仪、压力表、测长仪、显微镜、乘法器等均属于仪器仪表。
广义来说,仪器仪表也可具有自动控制、报警、信号传递和数据处理等功能,例如用于工业生产过程自动控制中的气动调节仪表,和电动调节仪表,以及集散型仪表控制系统也皆属于仪器仪表。
目录1引言 (1)1.1设计内容和要 (1)1.2 工作原理 (2)2总体设计 (2)2.1 方案设计 (2)2.2 系统框图 (2)2.3 核心芯片简介 (3)2.3.1 DS1302简介 (3)2.3.2 AT89C51简介 (3)3 智能电子钟软硬件电路的设计 (4)3.1 硬件设计 (4)3.1.1 复位电路设计 (4)3.1.2 DS1302与单片机的接口设计 (5)3.1.3 LED显示设计 (5)3.1.4 电源设计 (6)3.1.5 按键开关去抖设计 (6)3.1.6 时钟电路的设计 (7)3.1.7 电路总原理图设计 (8)3.2 软件设计 (8)3.2.1 流程图 (8)4protues仿真与调试 (11)4.1 电路的仿真 (11)4.2软件调试 (11)结论……………………………………………………………………………………………错误!未定义书签。
参考文献 (14)附录 (15)源程序 (15)1 引言电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。
本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。
本设计应用AT89C51芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
1.1设计内容和要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。
《智能仪器设计》课程教学大纲Design of intelligent Instrument一、课程教学目标1、任务和地位:没有测量就没有鉴别,科学技术就不能前进。
要测量就必须有正确的测量方法和先进的仪器仪表。
随着微电子技术和计算机技术的迅速发展,特别是单片微机的出现和发展,使传统的电子测量仪器在原理、功能、精度及自动化水平等方面都不得发生了巨大变化,形成一种完全突破传统概念的新一代测试仪器——智能仪器。
现在很多厂商、研究所以及高等院校都在研制开发各种智能化测量控制仪表,广大的仪表设计、生产和使用人员都不得迫切希望了解和掌握单片机在测量控制仪表中的应用技术。
为了跟上时代的步伐,本课程是测控专业学生必不可少的一门技术基础课。
2、知识要求:要求必须具备电路、电子仪器与测量技术、汇编原理及单片机原理的学习知识,通过本课程的学习为以后学生出去工作打下基础。
3、能力要求:系统地阐述基于单片机的智能化测量控制仪表的基本原理与设计方法,智能化测量控制仪表的人机接口、过程通道接口、串行和并行通讯接口、硬件和软件抗干扰技术、数据处理技术、仪表硬件及软件的设计方法。
通过课程设计加强学生综合知识的应用能力和设计动手能力。
二、教学内容的基本要求和学时分配2、具体要求:第一章绪论[目的要求]让学生了解智能化测量控制仪表的功能特点、智能化测量控制仪表的设计方法[教学内容]学习智能化测量控制仪表的基本与发展、智能化测量控制仪表的功能特点、智能化测量控制仪表的设计方法[重点难点]智能化测量控制仪表的功能特点[教学方法]板书,以教、学相结合来进行讲解。
[作业]课后复习思考题[课时]0.5学时第二章智能化测量控制仪表中专用微处理机[目的要求]让学生掌握MCS-51系列单片机的结构、MCS-51单片机的指令系统[教学内容]介绍了MCS-51系列单片机的特点、 MCS-51系列单片机的结构、CHMOS型单片机的节电工作方式、MCS-51单片机的指令系统[重点难点]MCS-51系列单片机的结构、CHMOS型单片机的节电工作方式、MCS -51单片机的指令系统[教学方法]板书,以教、学相结合来进行讲解。
天津电子信息职业技术学院传感器技能实训课题名称智能温度测温系统姓名王先民学号20班级电信S10-1专业电子信息工程技术所在系电子技术系指导教师岑永祚完成日期2011年12月11日一、 主要内容温度传感器DS18B20采集环境模拟信号,其输出送入AT89C51,单片机在程序的控制下,将处理过的数据送到移位寄存器74LS164,经74LS164输出后驱动三位数码管显示。
当被测温度高于18℃时,单片机发出控制信号使降温电扇以自然风的形式旋转,温度越高转速越快,温度36℃以上时风扇全速工作,点亮此功能指示灯。
二、 基本要求(1)设计测量温度范围-55℃~+125℃的智能测温系统,要求数码管实时显示测量温度,单片机根据温度高低确定风扇转速 (2)画出程序框图(3)有完整的整机电路图(protel 绘制)(4)完成格式正确、内容完整的实验报告三、 参考文献王祁, 智能仪器设计基础.北京:机械工业出版社,2009目录一、前言 (4)二、系统组成 (4)1、设计思路 (5)2、系统的性能指标: (5)3、系统的主要功能: (5)三、电路组成及工作原理 (5)1、温度传感器功能模块 (6)2、AT89C51单片机 ........................................................................................................ 8 3、74LS164移位寄存器 .. (12)4、晶振电路 (12)5、复位电路 ................................................................................................................... 13 6、键盘电路 . (13)7、显示电路 (14)8、稳压电路 ................................................................................................................... 14 9、显示电路 . (15)10、风扇控制电路 (15)四、课程设计心得与体会 (16)五、参考文献 (16)六、整机电路图 (17)七.心得体会 (18)智能温度测量系统的设计一、前言温度是一种基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量。
智能仪器课程设计课程设计名称3位半数字电压表学生姓名、学号谭彩铭(0501170118)指导教师牛国柱2009-1-16课程设计要求设计一3位半直流数字电压表,满足下列要求1、量程为20mV,200mV,2V,20V,200V,测量精度要求0.1%2、3位半数码显示3、工作状态显示4、开机自检5、配简单键盘,如量程切换6、配微型打印机接口由实际操作中遇到的问题找解决方案实际搭建的数字电压表的量程为20mV,200mV,2V和8V,能完成量程的自动切换,并有各种量程状态以及超、欠量程的指示灯显示。
原理图附录一所示。
对应的完整汇编程序见附录三。
1 原理图总体思路由于采用3位半AD转换器TC14433,提供的基准电压为2V,可测电压量程为2V,故大于2V的待测电压衰减后输入,小于2V的待测电压放大后输入。
衰减和放大由51单片机控制控制模拟开关4051,4052来完成。
调试当中,发现若输入电压为负时,比例放大就不准确了,且相差较大,故又用运放和模拟开关搭建了一反相控制电路。
原理图当中,U15为用OP07搭建的电压跟随器,用于增大输入阻抗,减小输出阻抗,以减少对待测电压的影响。
U16为用OP07搭建的一反相器。
U1用于若发现待测电压为负,让待测电压反相后进入后续电路。
U6作用同U15。
U1用于控制是否将待测电压衰减1/4后进入后续电路。
U4和U7用于控制是否对电压进行衰减以及衰减多少。
U17作用同U15。
U2为用MC1403搭建的2V电压源,用于输出较准确的电压源给TC14433作为基准电压。
2 AD转换部分TC14433中,EOC与DU端相连,选择连续工作方式。
EOC与51单片机的中端口0相连,由中断方式采集数据。
中断0采集数据服务子程序如图2所示。
3 升降量程及量程状态指示灯显示程序控制升降量程即控制模拟开关4051和4052,是否对待测电压进行放大或衰减。
如何有效的控制量程的自动转换是一较难点,尤其是保证程序的健壮性。
智能仪器设计基础实验教学大纲一、制定本大纲的依据根据2006级测控技术与仪器专业培养计划和智能仪器设计基础课程教学大纲制定本实验教学大纲。
二、本实验课程的具体安排三、本实验课在该课程体系中的地位与作用智能仪器设计基础实验是智能仪器设计基础课程的重要组成部分, 属于学科基础实验范畴。
作为与相关教学内容配合的实践性教学环节, 应在智能仪器设计基础课教学过程中开设。
学生应具有微型计算机原理, 电子技术基础自动控制理论基础知识。
四、学生应达到的实验能力与标准智能仪器设计基础实验是本专业学生获得智能仪器知识及动手能力培养的开端, 要求学生通过本课程实验, 具备利用单片机技术解决实际控制问题的能力。
通过实验的训练, 使学生掌握智能仪器设计的基本方法和基本技能, 加深对智能仪器知识的理解, 掌握智能仪器设计方法。
五、讲授实验的基本理论与实验技术知识实验一基本运算程序设计1.实验的基本内容(1)顺序、分支、循环程序设计联系。
(2)比较程序设计。
(3)排序程序设计。
2.实验的基本要求(1)熟悉和掌握控制类程序的编写方法和设计技巧。
(2)初步进行程序调试和运行的练习。
3.实验的基本仪器设备计算机。
实验二定时器应用程序设计1.实验的基本内容编程使T0工作于定时方式, T1工作于计数方式, T1的外部计数脉冲由T0产生, 最后由T1产生方波通过P1.1输出(用发光二极管的闪烁来表示)。
P1.0接T1,P1.1接发光二极管。
2.实验的基本要求(1)理解MCS—51系列单片机定时器和计数器的概念和区别。
(2)掌握和熟悉单片机定时计数器的初始化编程。
(3)学会运用定时器的定时与计数设计方法。
3.实验的基本仪器设备和耗材计算机。
实验三A/D功能设计实验1.实验的基本内容利用0809做A/D转换实验, 通过电位器提供模拟量输入。
编制程序, 将模拟量转换成数字量, 通过发光二极管L1—L8显示。
2.实验的基本要求(1)掌握A/D转换与单片机的接口方法。
智能型温度测量仪报告题目:智能型温度测量仪院别:机电工程与自动化专业:生产过程自动化技术班级: xxx姓名: xxxXxxXxx指导老师: xxx目录引言................................................. 错误!未定义书签。
一、系统设计任务及要求........................................... - 2 -1.1系统设计任务 (2)1.2系统设计的基本要求 (2)1.3系统概述 (2)二、系统总体设计................................................. - 2 -整体设计方案的确定 (2)三、硬件电路设计及工作原理....................................... - 3 -3.1参数采集模块设计 (3)3.2显示温度模块和显示时钟介绍 (3)3.3具体硬件电路原理分析 (4)四、软件设计...................................................... - 7 -4.1主程序流程图 (7)4.2DS18B20温度读取程序(如图9) (8)4.3DS18B20温度传感器初始化 (8)4.4读出温度子程序 (9)4.5DS18B20的读写时序 (10)4.6按键流程图 (12)五、主要技术指标的测量........................................... - 12 -六、结论......................................................... - 13 -结束语........................................................... - 14 -附录:硬件原理图.................................................. - 15 -引言:温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控参数之一。
基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。
二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。
具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。
四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。
2.画出软件流程图。
3.用Keil C51编写程序。
3.实验结果在LCD或LED上显示出来。
4.实验前完成第1、2项备查。
五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。
八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。
基于单片机原理的多功能测量仪的设计毕业设计目录设计总说明 (III)General Design Description (V)一 .绪论 (8)1.1课题的研究背景 (8)1.2测量仪表的简介 (8)1.3 51单片机简介 (9)二.电参数测量的理论依据 (11)2.1交流电流、电压有效值的测量 (11)2.2两相间相位差的测量 (12)2.3 单相有功功率、无功功率、视在功率的测量 (13)2.4 三相有功功率的测量 (13)2.5功率因数的测量 (14)三.方案设计 (14)3.1 使用功能要求 (15)3.2 仪器设计的总体框架和各模块的划分 (16)四.硬件电路设计 (18)4.1信号采集电路 (18)4.1.1 电压信号采集电路 (18)4.1.2 电流信号采集电路 (20)4.2整形电路设计 (20)4.3 A/D转换电路 (21)4.4 74ls138译码器 (31)4.5 A/D转换电路 (33)4.6显示电路设计 (34)4.6.1数码管的介绍 (34)4.6.2数码管结构 (36)4.6.3驱动方式 (36)4.6.4适用范围 (38)4.7 CD4511 (39)4.7.1引脚功能 (39)4.7.2工作范围 (40)4.7.3真值表 (40)4.7.4使用方法 (40)4.7.5锁存功能 (41)4.8 通信接口电路 (43)4.8.1 Rs485特点 (43)4.8.2接口 (43)4.8.3 rs485功能 (44)4.8.4 RS-485通信电路 (45)五.系统软件设计 (46)5.1 程序模块的划分 (46)5.2 结构化程序的设计方法 (46)5.3 软件模块 (47)5.3.1 主程序流程图 (47)5.3.2数据采集子程序 (49)5.3.3数据处理程序 (49)5.3.4 A/D转换程序 (51)5.3.5数码管显示 (52)5.3.6 RS485 (52)六.总结与展望 (54)附录A: 总电路图 (57)附录B: 总的系统框图 (58)附录C: 程序 (59)致谢 (64)基于单片机原理的多功能测量仪的设计设计总说明随着电力系统的快速发展,电网容量不断增大,结构日趋复杂,电力系统中实时监控、调度的自动化显得尤为重要,而电力参数的数据采集又是实现自动化的重要环节,如何快速准确地采集系统中各元件的电参数(电压、电流、功率、功率因数等)是实现电力系统自动化的一个重要因素。
单片机智能小车课程设计
一、课程的目的
本课程的目的是让学生学习如何使用单片机来构建智能小车,了解单片机的工作原理,掌握编程语言,完成智能小车的设计与制作,并将它应用到实际的解决方案当中。
二、课程的内容
本课程分为三个部分。
# 1. 单片机基础
本部分为学生提供单片机的相关理论知识,其中包括单片机工作原理、构建电路板等基础内容。
学生需要学习器件的原理、作用、施加电压的方式等。
# 2. 编程
本部分教学内容主要包括单片机的编程,需要学生掌握C语言和汇编语言的编程技巧,了解单片机的外部接口及它们的工作原理,学会使用汇编语言及相关软件操作系统等。
# 3. 实践
本部分主要让学生结合前两部分的内容,进行实践,将编程、接口等知识点应用到实际的智能小车中,实现从计划到实施的全部流程。
三、讲师及教材
本课程的讲授和教学由外聘的专业老师主讲,教材来源于国内外的单片机设计书籍及软件资料。
四、实验室设备
1. 智能小车实验室:配备了智能小车的电子元器件、电路板、外壳及测试仪器等,可以让学生进行智能小车设计与装配实验;
2. 编程实验室:配备了单片机软件开发工具、编程器及外部接口,用于学生的编程实验;
3. 课堂实验:课堂上展示完成的智能小车模型,并在学生观察的情况下,用编程语言完成小车的控制。
智能化仪器设计课程设计指导书中原工学院信息商务学院2012.5课程设计指导书一、课程设计目的通过该课程设计使学生进一步了解和加深智能化仪器设计的一般原则;熟练掌握智能化仪器与装置的软、硬件设计方法;掌握仪器的软件调试及软硬件联合统调方法与技能。
掌握仪器的接口技术;熟练掌握仪表总线的工作原理、设计步骤、编程及调试;掌握VB(或VC)设计软件的编程与调试方法。
二、课程设计的主要内容和基本要求1、内容:基于DS18B20的温度测量系统2、智能测距仪基本要求(1)可以对温度进行自由设定,但是必须在0-100摄氏度单位内,设定时可以适时的显示设定的温度值,温度是可以自由设置的,传感器的测量值可以显示在七段发光二极管上。
(2)如果温度不在20-35度之间,则在LED上显示“8888”,表示错误并报警。
(3)能够保持不间断显示温度,显示位数4位,分别为百位,十位,个位和小数位。
3、评估标准:(1)功能齐全(2)性价比高:线路简单、造价低、精度高,量程可调节等功能。
(3)可靠性高(4)资料齐全三、设备1.集成芯片、电阻、电容若干。
四、设计步骤1.指导老师讲解课程设计的目的与要求及注意事项,并下达课程设计任务书。
(周一上午)2.学生自己查资料方案论证(学生写出设计方案,并论证其正确性)。
(周一下午)3.设计并画出原理图。
(周二、周三)4.编写程序、联调。
(周四、五)5.发器件。
(周一)6.开始验收实物。
(周二)7.学生写出书面报告,并对本次课程设计进行总结。
(周四)五、设计过程1、方案论证:学生写出设计方案,并论证其正确性。
画出整机方框图。
2、硬件设计:(1)根据设计方案,设计各单元电路。
画出各单元电路sch图。
(2)根据单元电路要求,进行微处理器选型。
(3)相互审查整机电路图。
(4)进行pcb版设计。
3、软件设计(1)根据设计方案,设计整机程序流程图。
(2)根据整机程序流程图,设计各单元程序流程图。
(3)相互审查程序流程图。
论文题目:单片机系统设计开发应用—智能仪器学院:计算机科学与信息工程专业:软件工程学号:11103205姓名:高红斌日期:2013年12月1日单片机系统设计开发应用—智能仪器一、设计要求及目的本实验通过一个单通道通用型智能仪器的软硬件系统设计,将这学期学过的单片机原理加以综合运用,以此掌握单片机应用系统的设计要领,本次试验设计的总体目标是一路电压信号输入和两路报警开关量输出控制功能,其中信号电压范围0—5VDC,AD采样分辨率8bit,数码管显示信息为:以为参数字符和三位十进制采样值,控制参数有两个,即下限报警值L和上线报警值H,当采样值大于H时,高位报警继电器接通(用LED 状态灯D1亮表示);当采样值小于L时,下位报警继电器接通(用D2表示);当采样值介于L和H之间时,两路报警器功能均被解除(D1和D2均熄灭表示)二、实验环境微型计算机一台,proteus软件,keilC编译器。
三、元器件列表,图表1四、实验原理本实验选用了一只六联共阴极数码管显示器,按照动态显示原理接线,其中段码通过锁存器74LS245驱动后接于P0口,位码则有反相器74LS04驱动后接于P1.0-P1.5。
A/D转换器采用逐次逼近方式的芯片ADC0809,其并行数据输出端直接连接于P2口,4个控制端CLOCK,START,EOC,和OE分别接于P3.2-P3.5,采用查询法等待转换结束,转换时钟利用定时器中断产生。
四个面板按键通过8位串行输入并行输出移位寄存器74LS164与单片机接口,其移位时终端与单片机的TXD引脚相连,串行数据端(1和2脚)与单片机的RXD引脚相连,串口输出功能采用汇编语言与C51语言混合编程实现。
软件系统采用一个有多个功能模块构成的程序,模块之间相互依赖,他们之间的关系如图,程序有主要的两个功能模块组成——控制模块和菜单模块。
这两个模块能够同时运行。
这里,“同时”的意思是指用户进行菜单操作的时候,程序还能采集数据并进行控制。
图表2软件系统结构组成“控制”和“菜单”这两个主要的模块都是建立在其他小模块的基础上的,比如控制模块建立在A/D转换和LED 显示的基础上,菜单建立在按键检测和LED显示的基础上,而按键检测又建立在串口输出的基础上。
下表列出了各个模块的主要函数。
图表3各个模块的主要函数和功能五、程序源代码//main.cvoid ad_init();void control_thread();void menu_thread();void main(){ad_init();while (1){menu_thread();control_thread();}}//menu.c#define MENU_ON 0#define MENU_OFF 1#define MENU_NUM 2#define MENU_MAX 999#define MENU_MIN 0unsigned char param_value[] = {100, 150};unsigned char menu_status = MENU_OFF;char _menu_name[] = {'L','H'}; //参数名的符号unsigned char _menu_value[] = {0,0}; //供显示用的参数数组unsigned char _menu_idx = 0; //参数序号char get_key();void print(char name, unsigned int value);void menu_thread(void){char i = 0;char key = get_key();if (menu_status == MENU_OFF){//当前菜单为关闭状态时if (key == 0){ //若按键0已被按下menu_status = MENU_ON; //置当前菜单为打开状态_menu_idx = 0; //设置参数序号0//将所有参数当前值取出,送入供显示的参数数组中for (i = 0 ; i < MENU_NUM ; i++){_menu_value[i] = param_value[i];}}} else{//如果当前菜单为打开状态,则进行以下操作:if (key == 0){//若按键0按下,则不保存键值,仅切换到下一个参数if (++_menu_idx == MENU_NUM){ //判断是否所有参数都循环到了menu_status = MENU_OFF; //若已循环完成,设置菜单关闭状态}} else if (key == 1){//若按键1按下,则保存键值,并切换到下一个参数param_value[_menu_idx] = _menu_value[_menu_idx];if (++_menu_idx == MENU_NUM){menu_status = MENU_OFF;}} else if (key == 2) {//若按键2按下,则参数值加10_menu_value[_menu_idx] += 10;if (_menu_value[_menu_idx] > MENU_MAX) {_menu_value[_menu_idx] = MENU_MAX;}} else if (key == 3) {//若按键3按下,则参数值减10_menu_value[_menu_idx] -= 10;if (_menu_value[_menu_idx] < MENU_MIN) {_menu_value[_menu_idx] = MENU_MIN;}}}if (menu_status == MENU_ON) {//菜单状态为开时,显示参数值print(_menu_name[_menu_idx], _menu_value[_menu_idx]);}}//ad.c#include <reg51.h>sbit P32 = P3^2;sbit P33 = P3^3;sbit P34 = P3^4;sbit P35 = P3^5;sbit P37 = P3^7;unsigned char ad() {P33 = 0;P33 = 1;P33 = 0;while(!P34);P35 = 1;return P2;}void ad_init() {TMOD = 0x02;TH0 = 0;TL0 = 0;ET0 = 1;TR0 = 1;EA = 1;}void _ad_clock(void) interrupt 1 {P32 = ~P32;}//control.c#include<reg51.h>sbit P16=P1^6;sbit P17=P1^7;unsigned char ad();void print(char name, unsigned int value); extern unsigned char param_value[2];extern char menu_status;void control_thread() {//第1步:A/D转换unsigned char value = ad();//第2步:根据采样值控制LED灯if (value > param_value[1]) {P16 = 0;P17 = 1;} else if (value <= param_value[1] && value >= param_value[0]) { P16 = 0;P17 = 0;} else {P16 = 1;P17 = 0;}//第3步:如果菜单是关闭的,显示采集到的数值if (menu_status == 1) {print(' ', value);}}//keyboard.c#include <reg51.h>#define CHECK_KEY_DOWN 0 //处在检测按键压下阶段标志#define CHECK_KEY_UP 1 //处在检测按键抬起阶段标志#define KEY_UP 0 //按键抬起标志#define KEY_DOWN 1 //按键压下标志sbit _p33 = P3^3;sbit _p34 = P3^4;sbit _p35 = P3^5;sbit _p36 = P3^6;char _key_status = CHECK_KEY_DOWN; //按键检测状态(初值为检测压下阶段)char _key_idx = 0; //按键序号void serial(char byte);char _check_key(unsigned char _key_idx) { //检查按键状态serial(~(0x01<<_key_idx)); //将待查按键键码转换成扫描码后输出if (_p36 == 0) { //根据P36状态决定返回值return KEY_DOWN;} else {return KEY_UP;}}char get_key(void) {char result = -1; //无键按下时键值为-1if (_key_status == CHECK_KEY_DOWN) { //如果当前处于检查压下阶段,进行以下操作if (_check_key(_key_idx) == KEY_DOWN) { //判断当前扫描键的状态,若为压下标志则_key_status = CHECK_KEY_UP; //将检查阶段标志设置为抬起} else { //否则,将检查阶段标志设置为压下if (++_key_idx == 4) { //判断是否4个按键已经轮流扫描一遍_key_idx = 0; //是,则将待扫描按键号设为0}}} else if (_key_status == CHECK_KEY_UP) { //如果当前处于检查抬起阶段,进行以下操作if (_check_key(_key_idx) == KEY_UP) { //判断当前扫描键的状态,若为抬起标志则result = _key_idx; //键值输出_key_status = CHECK_KEY_DOWN; //按键检查阶段标志改为压下if (++_key_idx == 4) { //判断是否4个按键已经轮流扫描一遍_key_idx = 0; //是,则将待扫描按键号设为0}}}return result;}//led.c#include<reg51.h>char code map1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; char code map2[]={0x00,0x76,0x38};char _convert(char c){if(c==' ')return map2[0];else if(c=='H')return map2[1];else if(c=='L')return map2[2];else if(c>='0'&&c<='9')return map1[c-'0'];return 0;}void _delay(){int i=0,j=0;for(i=0;i<10;i++){for(j=0;j<10;j++){}}}void print(char name, unsigned int value) { char buf[6];char i = 5;for (i = 5 ; i > 1 ; i--) {buf[i] = '0' + value % 10;value /= 10;if (value == 0) {break;}}i--;for ( ; i >= 1 ; i--) {buf[i] = ' ';}buf[0] = name;for (i = 0 ;i < 6 ;i++) {P1 &= 0xC0;P1 |= (1 << i);P0 = _convert(buf[i]);delay();}}//serial.asmPUBLIC _SERIALDE SEGMENT CODE RSEG DE_SERIAL:MOV SCON, #0MOV SBUF, R7JNB TI, $CLR TIRETEND六、实验结果图表4程序通过编译,并且没有错误系统运行效果如图所示,参数设置状态效果如图所示。