第一篇:51单片机论文
课程设计报告
课程设计名称:智能控制避障小车 学生姓名: 班
级: 学
号: 成 绩: 指导教师:
开课时间:2016-2017学年第 一学期
I
独 创 声 明
本人声明所呈交的课程设计是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含未获得(注:如没有其他需要特别声明的,本栏可空)或其他教育机构的学位或证书使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在设计报告中作了明确的说明并表示谢意。
作者签名: 日期:年月日
II
摘 要
介绍一种基于stc89c51单片机实现的智能避障小车设计。该系统前方采用两个红外反射式光传感器fc-51检测障碍物,控制系统通过检测信号识别障碍物并发出指令使小车绕行。
关键词:智能 控制 避障 单片机III
传感器
目录
(以下内容仅供参考).系统功能………………………………… 系统工作原理
2.设计方案……………………………………………………………… 2.1车体设计………………………………………………………………… 2.2电源模块………………………………………………………………… 2.3 避障模块………………………………………………………………… 2.4电机模块………………………………………………………………… 2.5电机驱动模块…………………………………………………………… 2.6 最终方案………………………………………………………………… 3 系统程序……………………………………………………………………….总结………………….参考文献…………………
IV.系统功能
系统工作原理:
系统主要由控制单元、电机驱动、外部输出、红外发射、红外接收等单元组成。
图1 系统机构图
智能控制避障小车的设计采用现在较为流行的8位单片机作为系统大脑。以8051系列家族中AT89C51为主芯片。4个端口引脚控制信号输入电路,控制电路,执行电路共同完成避障行驶控制。
2.设计方案 1车体设计:
智能控制小车采用中间轮驱动,中间轮左右两边各一个电机驱动,控制中间面两个大轮子的停走从而控制小车的方向;前后轮是换向轮起支撑作用。将两个避障模块放在车子的左前方和右前方。如下图所示:
小车底盘,可以清楚的看到小车电机控制车轮,以及换向轮所在位置。
上图可以看出小车电源最小系统板还有排针以及开关的位置。
从小车正面看出内部驱动,前方的避障模块。(超声波检测,寻迹模块)
2电源模块:
电源模块即电池与电池盒,通过电池盒接通电路,输送电源来驱动小车跑。避障模块:
传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3V-5V。
4电机模块:
电机模块主要控制小车的中间两轮,从而控制小车的前进与后退。
控制电机的转速也能控制小车的前进速度。电机驱动模块:
电机驱动模块使用ST公司的L298N作为主驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点。
电机驱动模块可以使用内置的78M05通过驱动电源部分取电工作,但是为了避免稳压芯片损坏,当使用
大于12V驱动电压的时候,我们使用外置的5V逻辑供电。
电机驱动模块使用大容量滤波电容,续流保护二极管,可以提高可靠性
原理图 最终方案:
利用驱动模块降压,接通51单片机,通过程序控制小车运动,通过避障改变运动轨迹,从而实现避障。.系统程序
程序: #include
#define uint unsigned int //定义全局变量
sbit IN1=P1^0;sbit IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;//定义驱动引脚
sbit out1=P2^5;sbit out2=P2^6;//定义避障引脚
void run()
//小车跑
{
if(out1==0&&out2==1)//小车右转
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
else if(out1==1&&out2==1)//小车前进
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
else if(out1==1&&out2==0)//小车左转
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
} else if(out1==0&&out2==0)//小车左后转
{
IN1=0;
IN2=1;
IN3=0;
IN4=0;
} } void main()
//主函数
{ while(1)
{
run();
} } 改程序是利用避障模块检测,若左边避障检测到,小车右转,右边检测到,小车左转,都没检测到,前进,都检测到,小车左后退。.总结
智能避障小车软硬件配合要紧密,在硬件中,要把各个零件配合时要连接正确,否则有烧坏的可能,写程序时要注意步骤,要有思路,程序代码要记清,写程序时要认真,避免出现小失误。从做这辆小车以来,我学到了很多知识,也碰到了很多困难,但最终都克服了,只要有一颗不服输的心,我想信,困难只是暂时的,最后都会解决。.参考文献
[1]郭惠,吴迅 单片机 c语言程序射进完全自学手册[M] 电子工业出版社,2008.10.1-200 [2]王东锋,王会良,董冠强 单片机c语言应用100例[M] 电子工业出版社,2009.3.145-300 [3]韩毅,杨天,基于HCS12单片机的智能寻迹模型车的设计与实现[j] 学术期刊,2008,29(18):1535-1955
第二篇:单片机课程设计论文
目录
题目:巡回检测报警控制系统
第一章 实验任务及要求............1功能描述................2元件选择.......................2
第二章系统总体设计方案................3键盘控制、LED数码显示、A/D数据采集、...........4第三章详细设计..........51.硬件电路设计.............6
a.硬件系统框图............7
b.组成部分原理图...............8
2.软件设计..........8
a.软件系统组成流图............8
b.如初始化、中断程序、显示模块等子程序流图.........9
c.子程序功能说明..............9
第四章测试............10
测试方法,过程及结果等........1
1第五章总结............11
参考文献.................1
2附录.............12
关键程序代码................1
3题目:巡回检测报警控制系统设计
第一章 实验任务及要求
功能描述:设计一个多路数据采集测控系统,具有控制及显示功能:
1.对多路模拟信号进行采集,将采集到的电压值通过LED显示出来。
2.设置被测量的阈值,对被测量进行临控,当达到阈值时,启动报警(如指示灯)或启动相应的设备(如直流电机)。
3.键盘可以控制在LED上显示哪一路被测量的值。
元件选择:80C51单片机、ADC0809、HD7279、74LS37
3第二章系统总体设计方案
设计思路如下:
1.4路模拟电压信号通过4个电位器提供0-5V的电压信号。
2.选择ADC0809芯片作为A/D转换器,4路输入信号分别接到ADC0809的IN0—IN4通道,每隔一定的时间采样一次,采完一路采集下一路,4路电压循环采集。
3.利用3个LED数码管显示数据,1个数码管用来显示输入电压路数,3个数码管用来显示电压采样值。
4.选择HD7279做键盘控制,键值显示相应通道采样值。
5.延时由8051来实现。
第三章详细设计
1.硬件电路设计:根据设计思路,硬件主要利用了单片机80C51实验平台上的ADC0809模数转换器、HD7279控制键盘以及LED显示输出等模块。
a.硬件系统框图:
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0809属于第二类,是八位A/D转换器。每采集一次需100uS。A/D转换结束后会自动产生EOC信号,可以采用查询EOC信号方式,也可采用EOC中断方式来确定A/D转换是否结束。
b.ADC0809原理图以及与8051的接线
HD7279键盘控制LED显示
2.软件设计4
第三篇:单片机导游应用论文
文 章来
源莲山 课
件 w w w.5Y
k J.Com 7 凌阳单片机在电子导游器中的应用是小柯论文网通过网络搜集,并由本站工作人员整理后发布的,凌阳单片机在电子导游器中的应用是篇质量较高的学术论文,供本站访问者学习和学术交流参考之用,不可用于其他商业目的,凌阳单片机在电子导游器中的应用的论文版权归原作者所有,因网络整理,有些文章作者不详,敬请谅解,如需转摘,请注明出处小柯论文网,如果此论文无法满足您的论文要求,您可以申请本站帮您代写论文,以下是正文。
摘要:本文设计一种智能电子解说系统,具有智能化、个性化、高音质、实用性强等特点。让游客按照设定的经典路线,选择景点或展位的讲解使每个观众不但得到每个展位、景点的完整信息,而且感受到高清晰、低噪声的音响效果,电子旅游解说系统的出现,使看起来简单的解说系统融入了科技的因素。
本文正是基于凌阳公司的SpCE061A单片机并采用A2000语音压缩算法对语音信号进行了压缩存储以及播放。由游客控制选择按键来播放语音,这样大大降低了外面的干扰,使每个观众不但得到每个展位、景点的完整信息, 而且感受到高清晰、低噪声的音响效果。
关键词: 旅游;电子解说;电子导游;凌阳单片机 绪论
随着改革开放和经济的发展,旅游业也获得了长足的发展,节假日外出旅游已成为人们的首选。对大多数零散游客来说,希望有一种不受制于人的辅助导游手段,迫切需要一种携带方便、操作简便的电子语音导游器。
本文设计一种智能电子解说系统,选用了凌阳公司的SpCE061A单片机并采用A2000语音压缩算法对语音信号进行了压缩存储,经过这样处理合成后的语音音质良好,放音时间持久,而且机体积很小。凌阳单片机简介
SpCE061A是凌阳科技研发生产的性价比很高的一款十六位单片机。该芯片拥有8路10位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。
凌阳音频压缩算法处理的语音信号范围是200Hz-3.4KHz的电话语音。根据不同的压缩比分为以下几种: SACM_A2000、SACM_S480、SACM_S240。SACM-A2000音频压缩算法的压缩比较小,编码速率可选择16kbit/s、20 kbit/s、24 kbit/s三种之一,具有高质量、高码率的特点,适于高保真语音或音乐。硬件系统设计
本系统的硬件部分主要实现路线的显示和景点语音的播放。根据景区景点设计一条经典路线,将沿途主要景点用高亮三色LED显示。红色表示还没有听过解说的最近的景点,黄色表示正在听取解说词的景点,绿色表示最后播放过解说词的景点。语音播放按键分为景点相应放音、暂停、继续放音、结束等。音频信号存储在凌阳语音储存芯片中。语音信号放大由凌阳公司开发的专门用于语音信号放大的芯片SpY0030A完成。整个系统的控制由凌阳单片机SpCE061A实现。具体硬件系统框图如图1所示。
4软件系统设计
本设计选用了SACM-A2000语音压缩算法对语音信号进行了压缩存储。再利用中断进行键盘扫描程序循环扫描按键,获取按键信息后和内置的操作码比较,用来确定播放相应的语音和显示相应的LED灯。景点的解说词事先利用凌阳内置提供的工具进行压缩和存储。
系统的主程序流程图如图2所示,假设主要讲解景点共4处,分别由KEY1~KEY4控制播放,KEY5是暂停播放、KEY6是继续播放、KEY7停止播放。开机时对系统初始化,包含对显示景点的初始化、对语音播放模块初始化、对键盘初始化等。在键盘初始化中设置时基频率为128Hz的中断,并打开中断。这是为在中断中扫描键盘,利用延时法去抖动,延时时间是响应多少次128Hz中断过程。在KEY1~KEY4键控制下播放景点解说词实际是提取相应景点的语音信息的起始存储地址,然后执行相应的语音播放程序。由于语音播放中断服务子程序必须放在TMA-FIQ中断源上,进入中断服务程序必须先保护寄存器,接着判断是不是TMA-FIQ中断。若是,还要判断是哪一段语音要播放,也就是要获取播放语音的起始地址。在TMA-FIQ中断调用F_FIQ_Service_SACM_A2000函数译码播放。制作
录制的语音文件在播放前需转换为SACM_A2000格式的压缩文件。语音压缩可以使用凌阳语音压缩工具(Compress Tool)完成。该压缩工具支持.wav格式的语音压缩,但要求压缩语音资源属性为8kHz,16位,单声道。结论
经过测试,电子语音导游器的性能达到了设计目标,具体如下:各景点语音解说资料、开机欢迎语音信息播放正常,声音清晰;各按键功能正常,各LED管显示正常。凌阳公司的SpCE061A的结构特点及其相关的开发平台,为我们开发带语音特色的产品方案带来了很大的方便,本系统仅是SpCE061A的一个基本应用,体现了SpCE061A多种资源对产品开发的极大支持,同时体现了其的语音特色。
参考文献
[1] 薛钧义等.凌阳十六位单片机原理及应用.北京:北京航空航天大学出版社,2003
[2] 李学海.16位语音型单片机SpCE061A实用教程-基础篇.北京:人民邮电出版社,2007
文 章来
源莲山 课
件 w w w.5Y
k J.Com 7
第四篇:C51单片机实训论文
上海第二工业大学
实训课程
课 程: 二级项目(电子设计)
学生姓名:
许奇峰
学 号:
104827477
学院名称:
电子与电气工程学院
专业班级:
10测控C1
摘要
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本实验采用的单片机为C51,以C语言为程序设计的基础,通过4*4的矩阵键盘上的特定的按键来控制1602液晶显示屏,以显示设计人的姓名、学号,还有时钟来显示时、分、秒、日期,并且显示当时的温度,PWM和A/D转换等功能。
一. 实验目的
通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解单总线的读/写控制方法。同时培养学生理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。本次实验的目的主要有以下几点:
1、熟悉51单片机的基本构造和原理基础;
2、能运用51单片机进行简单的单片机应用系统的硬件设计;
3、掌握单片机应用系统的硬件、软件调试方法; 4、4*4矩阵键盘的应用,1602液晶显示屏幕的应用等;
5、运用C51单片机来设计显示时钟、温度、PWM、A/D转换。
二.硬件组成
·51单片机最小系统
1、震荡器
单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。
2、复位端 复位电路
给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常
·AT89C51 1)简介
A89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示。2)功能特性 ·与MCS-51 兼容
·4K字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保留时间:10年
·全静态工作:0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
·矩阵键盘(如附录2,图2)
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
·蜂鸣器
通过加一个低电压,大电流,小信号的PNP型硅三极管Q8550来放大电流达到驱动蜂鸣器的作用,蜂鸣器的正极接到Q的集电极C上,蜂鸣器的负极接地,三极管的发射极E接电源VCC,基极B经过限流电阻R9后与单片机P1.3的引脚相连,当单片机P1.3引脚输出高电平时,三极管截止,没有电流通过线圈,蜂鸣器不发声;当单片机P1.3引脚输出低电平时,三极管导通,电流形成回路,蜂鸣器发声。
·LED1602液晶屏
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。引脚定义:
1脚:VSS为电源地;
2脚:VDD接5V电源正极;
LED1602引脚图
3脚:V0为对比度调整端,接正电源时对比度最弱,接地电源时最高;
4脚:RS为寄存器选择,高电平时数据寄存器、低电平时指令寄存器;
5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作;
6脚:E(或EN)端为使能(enable)端;
7~14脚:D0~D7为8位双向数据端;
15~16脚:空脚或背灯电源;15脚背光正极,16脚背光负极。
二.实验过程
1.启动KEIL,使用自己做的含C51芯片的单片机电路板。2.在main.c中编写主程序代码
3.选用build target 生成目标,然后编译连接工程
4.打开STC-ISP-V4.86-NOT-SETUP-CHINESE,选择com口,将编译的文件下载到电路板上
5.按键操作,显示,观察。。
开始初始化While 1NN有键盘按下Y再次从新扫描延时一段时间真的有键盘按下吗Y键盘扫描处理根据不同的扫描值赋值于Key根据Key值做相应程序处理结束
实验流程图
四. 实验总结
随着电子技术的日益进步,微型计算机取得了突飞猛进的发展。作为微型计算机的一个重要分支,单片机以其体积小、功能齐全、价格低廉、可靠性高等特殊优点,在工业测控、智能仪表器、机电一体化产品、家电等领域取得了快速的发展。
通过几天的实习,深有体会,学习单片机只有对着电脑,反复敲打键盘,不断编写、修改、做记录,才能很好了解单片机、学好单片机。相信捉住这条思维,在以后学习中,能给予很大的帮助。几天下来,在我个人方面,学到的东西还是挺多的。
经过一个学期的单片机学习,使我们收获不少,在这个设计中,也学到了不少东西,从找设计开始,各种元件的选择,和同学一起分享画图,敲程序,学到了制作的过程,对数字电子钟也有了一定的认识。十分感谢老师和同学们一学期以来的帮助。这次实验,不仅学会了电子钟的制作,也对单片机的知道有了更加深入的了解,对自己帮助非常大,扩展了自己的视野。一.实验附录
附录一(效果图)
图一.菜单显示 图二.菜单显示
图三.菜单显示 图四.时间显示
图五.A/D转换显示 图四.温度显示
附录二(参考程序):
#include
//延时程序 { uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);} void wr_com(unsigned char com)
//写命令 { delay1ms(5);EN=0;
//使能端给一个高脉冲,因为初始化函数中已经将lcden置为0 RS=0;
//选择写命令模式
RW=0;
//P0=com;
//将要写的命令送到数据总线上
EN=1;
//将使能端置0以完成高脉冲
} void wr_dat(unsigned char dat)
//写数据 { delay1ms(5);EN=0;RS=1;RW=0;
P0=dat;EN=1;} void init()
//清屏
{wr_com(0x38);
//设置16*2,显示5*7点阵,8位数据接口
wr_com(0x0C);
//设置开显示,不显示光标
wr_com(0x06);
//写一个符号地址指针自动加一
wr_com(0x01);
//显示清0,数据指针清0} void MoveKey(uchar Num){ lcd_clr();
wirte_str(0,0,Anum[Num]);
wirte_str(1,0,Anum[Num+1]);
lcd_wcmd(0x0f);} void keypress(uchar key)
//显示
keypress
功能
{ if(key==12)
//下
{ MoveKey(num);
keyboard=num+1;
num--;if(num<0)num=5;delay(10);}
if(key==16)
//上
{
MoveKey(num);
keyboard=num+1;
num++;
if(num>5)num=0;delay(10);}
if(key==11)
//退出
{ lcd_clr();
wirte_str(0,0,“Xu Qifeng”);
wirte_str(1,0,“104827477”);}} void getKey(){ uchar temp,readRow;P2=0xFE;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{ delay(10);
readRow=~temp>>4;switch(readRow){case 1:key=10;break;
//enter 进入
case 2:key=11;break;
//esc
退出
case 4:key=12;break;
//下
case 8:key=16;break;
//上
default:break;}
while(temp!=0xf0)
{temp=P2;
temp=temp&0xf0;} delay(10);
keypress(key);} P2=0xFD;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{ delay(10);
readRow=~temp>>4;switch(readRow){case 1:{key=14;m++;if(m==10)m=0;};break;//右
case 2:key=3;break;case 4:key=6;break;
case 8:key=9;break;}
while(temp!=0xf0)
{temp=P2;
temp=temp&0xf0;}
delay(10);
keypress(key);} P2=0xFB;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{ delay(10);
readRow=~temp>>4;switch(readRow){case 1:{key=13;m--;if(m==0)m=10;};break;//左
case 2:key=2;break;case 4:key=5;break;case 8:key=8;break;}
while(temp!=0xf0)
{temp=P2;
temp=temp&0xf0;}
delay(10);
keypress(key);} P2=0xF7;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{delay(10);
readRow=~temp>>4;switch(readRow){case 1:key=0;break;case 2:key=1;break;case 4:key=4;break;case 8:key=7;break;}
while(temp!=0xf0)
{temp=P2;temp=temp&0xf0;} delay(10);keypress(key);}} voidtime1()interrupt3
//显示
Time
功能
{ TH1=0xdc;TL1=0x00;
count_10ms++;}
void time1_init(){ TMOD=0x10;TH1=0xdc;TL1=0x00;EA=1;ET1=1;TR1=1} uchar disp_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};void lcd_dat(uchar h,m,s)
//读取时间
{disp_buf[0]=h/10+0x30;disp_buf[1]=h%10+0x30;
disp_buf[2]=m/10+0x30;disp_buf[3]=m%10+0x30;
disp_buf[4]=s/10+0x30;disp_buf[5]=s%10+0x30;} void lcd_display()
//显示时间 { lcd_wcmd(0x44|0x80);lcd_wdat(disp_buf[0]);lcd_wdat(disp_buf[1]);
lcd_wdat(0x3a);lcd_wdat(disp_buf[2]);lcd_wdat(disp_buf[3]);
lcd_wdat(0x3a);lcd_wdat(disp_buf[4]);lcd_wdat(disp_buf[5]);} void Time()
{keyboard=0;
time1_init();
lcd_init();
wirte_str(0,0,“Time”);
while(1)
{ if(count_10ms>=100)
{ count_10ms=0;
sec++;} if(sec>=60)
{sec=0;min++;
if(min>=60)
{ min=0;hour++;
if(hour>=24)
{ hour=0;min=0;sec=0;} } } lcd_dat(hour,min,sec);
lcd_display();
getKey();
if(key==11)break;}}} voidTempture()
//显示
Temp
功能
{ void display()
{ unsigned long temp;
temp=Temp*100;
disdata[0]=temp/1000+0x30;//十位数
disdata[1]=temp%1000/100+0x30;// 个位数
disdata[2]=temp%100/10+0x30;//小数
disdata[3]=temp%10+0x30;
if(disdata[0]==0x30)
{ disdata[0]=0x20;//如果十位为 0,不显示
if(disdata[1]==0x30)
//如果十位为 0,个位为 0 也不显示
{ disdata[1]=0x20;} }
lcd_wcmd(0xc1);
lcd_wdat(disdata[0]);//显示十位
lcd_wdat(disdata[1]);//显示个位
lcd_wdat(0x2e);//显示小数点
lcd_wdat(disdata[2]);//显示小数
lcd_wdat(disdata[3]);} uchar disdata[5];float Temp;
void delayms(uint xms){ uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);}} voidAD_Init()
// 显示
A/D
功能
{ P1M0=0x0f;
//设置P1口低4位为开漏模式,AD采集
P1M1=0x0f;
P1ASF=0x0f;
//P1口模拟功能控制位,ADC_CONTR=0xe0;
//开启AD转换并选择最高转换速度
AUXR1=0x00;
//数据格式设置
高八位在ADC_RES 低二位在ADC_RESL
delayms(100);} int GetAD(uchar channel)//选择通道号
并获取数据 {uchar AD_finished=0;
int result;
ADC_CONTR|=channel;
//选择通道号
ADC_CONTR|=0x08;
//启动AD转换
while(AD_finished=0)
{ AD_finished=(ADC_CONTR&0x10);//查询ADC_FLAG是否置1} result=ADC_RES*4+ADC_RESL;ADC_CONTR&=0xef;//清除转换结束标志
return(result);} float Ad_Av(uchar channel)//对获取的数据进行处理 {float Val_Av=0;
uchar num;
for(num=100;num>0;num--)
{Val_Av+=GetAD(channel);}
Val_Av/=100.0;
Val_Av=Val_Av*5/1024;
return(Val_Av);} void AD()
{ keyboard=0;
AD_Init();
lcd_init();
lcd_wcmd(0x80);//显示字符
AD
lcd_wdat(0x41);
lcd_wdat(0x44);
while(1)
{delayms(500);
Temp=Ad_Av(0);
//通道0进行数据采集
display();getKey();if(key==11)break;}} sbitPwm=P1^0;
//显示
PWM
功能 uchar n=0,m=0;void delayms(uint xms);void Timer0_init();void PWM(){ keyboard=0;
time1_init();
lcd_init();
lcd_clr();
wirte_str(0,0,“PWM”);
while(1)
{ if(count_10ms>=10){ count_10ms=0;
if(n<=m)
Pwm=1;
else
Pwm=0;
n++;
if(n==10)n=0;}
getKey();
if(key==11)break;}} voidElse()
{lcd_clr();wirte_str(0,0,“That's all”);wirte_str(1,0,“Thank you”);delay(100);keyboard=0;} void main()
{ lcd_init();
wirte_str(0,0,“Xu Qifeng”);
wirte_str(1,0,“104827277”);
while(1)
{getKey();
if(key==10)
//enter
{switch(keyboard)
{ case 1:Time()break;
case 2:Tempture();break;
case 3:AD();break;
case 4:PWM();break;
case 5:Else();break;
default:break;}}}
//显示
Else 功能
//主函数
第五篇:单片机温度传感器论文_图文.
毕业设计(论文)答辩记录表 学生姓名 所学专业 指导老师 答辩教师提问 性 别 论文题目 答辩小 组成员 学生回答问题情况 班 级 答 辩 记 录 指 导 教 师 评 语 指导老师(签名): 年 月 日 21 初评成绩(由指导老师填写)答辩主持人(签名): 年 月 日 毕业设计(论文)评价表 毕业 设计(论 文)评语 答辩 评语 评 定 等 级 答辩成员签名 年 月 日 22 答辩委员会 主任意见 签字 年 月 日 23