基于单片机的多功能综合应用系统的设计单片机课程设计报告_第1页
基于单片机的多功能综合应用系统的设计单片机课程设计报告_第2页
基于单片机的多功能综合应用系统的设计单片机课程设计报告_第3页
基于单片机的多功能综合应用系统的设计单片机课程设计报告_第4页
基于单片机的多功能综合应用系统的设计单片机课程设计报告_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计实验报告设计题目:基于单片机的多功能综合应用系统的设计专 业:电子信息工程 _班 级: _姓 名: _指导老师: _目录第一章 设计说明1.1设计目的 .31.2设计内容及要求 .3第二章 硬件电路仿真实现2.1硬件结构分析. 52.2基本功能仿真电图.62.3扩展功能仿真电路图 . 102.4实物电路图. 15第三章 软件设计实现3.1软件程序内容 .163.2模块分析 .163.3程序流程图 . 17第四章 系统测试4.1软件调试 .194.2硬件调试 .19第五章心得体会.20第六章参考文献.21附录 . 21第一章 设计说明1.1设计目的单片机在许多领域使用十分广泛,如智

2、能仪器仪表、实时工控、 通讯设备、导航系统、家用电器等。各科任老师们经常说“学好单片 机,工作就不成问题了。”可见学好单片意义之重大。单片机作为一 门基础学科,既是对前期学习 C 语言的综合运用,也是理论与实践 相结合的一大体现。 本次课程设计通过基础部分, 拓展功能以及整体 电路的实现能很好地锻炼我们的动手及编程能力。1.2设计内容及要求内容:1设计并实现具有复位功能的单片机小系统。2利用单片机进行灯光的场景开关控制、循环点亮控制、花样 变化控制及速度变化控制 (如:左右循环、 扩散收缩式移动、 流星雨、 舞台灯光综合效果、名曲名句跟随显示等。至少应做两项:前两项选一并有速度变化控制功能,后

3、三项选一或自创特色花样)。3.炫彩音乐显示(依据 3 秒以上某名曲名句,模拟高、中、低 音三分频,彩色LED随音频变化而起伏显示的效果,进一步地,LED 亮度跟随音乐响度闪烁)。4利用单片机进行灯光的色彩连续变化效果控制。5利用单片机进行灯光的三色联动定时控制 (以交通灯为例) 。(说明: 3、4 中二选一, 1、2、5 必选)6.配合 2 至 5 项中功能,实现液晶屏输出功能或状态信息。7.以调节 5 或 4 项中的时间为例实现基于 4X4 键盘的输入功 能。(可用现有成品键盘, 也可自己课外用按键开关焊接自己的键盘。 )8.数字温度计的设计(要求:实时显示温度、设置限值温度、 超限报警等)

4、9. 32x16 点阵 LED 显示同组同学汉字名(利用取字模软件获 取数据);10.智能式直流电压表的设计。要求:( 1 )能启动、停止;(2)能通过开关进行功能选择;(3) 基本功能部分要体现循环、组合和色彩变化的控制功能 和效果,实现三色联动定时控制, 控制变化规律的类型或功能不少于 5 种。元件清单:序号名称、规格单位数量/组组数备注1AT89S51/2片122AT89S512连线把4共用分红、黑、蓝、绿等色312MHz晶振只122Crystal447p电容只222510u电容(电解)只122Electrolytic capacitor60.1u电容只122capacitor7电阻33

5、0 Q只1022resistor8电阻1k只1022resistor9可调电阻10k只42210电阻:510 QX8排阻只22211红色LED小灯只322LED12绿色LED小灯只22213蓝色LED小灯只32214按键式开关只122Button15拨动式开关只622switch16面包板块1221774LS04片222可换用 74LS07/06、74HC24518RT1602液晶显示屏只12219DS18B20 温度传感器只122208550三极管只122PNP型21有源一体蜂鸣器5V只122第二章硬件电路仿真实现2.1硬件结构分析1、单片机仿真硬件系统由复位电路、晶振电路、独立键盘 输入、

6、彩灯输出、矩阵键盘输入以及 LCD显示模块构成。根据课本上的内容,首先搭建好复位电路与晶振电路,P1 口接8个发光二极管,P3 口接键盘,P2.4、P2.5、P2.6和P0 口接LCD 显示,单片机实物电路由复位电路、晶振电路、独立键盘输入、彩灯输ha3A1pn1Ldh1361pl35 IP斗卜34 I亡眄33 I%JFM I叶21吃1:)TfiXp Ej- T -E I j TEXT TXT* TEXTRV11k出模块构成。由P1 口接入彩灯。其中晶振连接需注意到,两端测 试电压的差值在2V左右时才能正常起振工作。复位电路在未工作时不能有电压。2.2基本功能仿真电路图复位电路时钟显示电路口L

7、CD1詆*=wk IITSI BOd C.戶戶 Q Q Q Q O-TEXT键盘具体仿真图及说明部分日t_ 二| nri- ifa a- -vn-戸 二ZITiEIItABD re iinw PK rcji:AH riMfei 址邸BE r npiKn FC.1LBrFSaE- FS.Idie me mtn 吒g rEFJtT-P l IITSCI 卜-.rrr rzjffFTI*3*TDT3FT1ER厂LIE:li4UZlf3:|=1L3 1=按S1交通灯vmiMSESrua*xuP?曲费 rzarj.3 ew F77吞F3 WIZ-OMinnrzjTFBPlVima3*iT3 HE nsi

8、.nITDMit硏1!w:上吋按S2灯光的色彩连续变化三色联动按S3就转变为流星雨LLC4GLTpr*ns &rzrs PT 阳K. rA-ft-;T3KT*Z2IffFI*-4H1rJJL3iFBI HFP冲=何niTHTOEFZJ.TmTTSiiFrlTU十 FI2.3扩展功能仿真电路图温度计部分:I-r-EbwI-r-Ebw 11011101 rdl-rdl- EK.3-EK.3- =-=-+ AJax -i:( i 訂-isis ELHgELHg _uUEn_uUEn DE1HMDE1HM LO言 LED-LED-CFEEhCFEEh LOELOE LEF.rJLEF.rJlnvlnv

9、 一c_._.-c_._.- ISPISP3-3-FEEFEEJIF =-r-M!i i- -ss ri14:-wlawssK25 30。CN 旁哺西歳孑=n=n HR.drHR.dr HuHu OrugnOrugn S9S9 EMEM ub$ub$ -350-350 I4II=4II=4I否!-_ *-一测一*里JVRIJVRIn-n-y II i II M *BurnBurn 耶 mhnmhn si-fc-si-fc- DsisiJoDsisiJo Lo*書 LED-LED-OREFOREF R RDHDDHD LO 誌 I1W 一 .- LNSPLNSP3 31 1 戎G5.TCHG5.

10、TCH _=rtswHrtswH-Ji 一 - 】IGIG吗甬左皿 ElH-lmonLlgEElH-lmonLlgE霍竺.LS.LS9I9I 32*16显示屏部分:显示屏显示:第四部分智能电压表部分:按下BUTTON键,LED灯亮起,调节RV1的值,LED亮灭变化,代表不同的输出电压值调节RV1,阻值最大订耳.用 I.WWI 和旳单R5T呷护邮0 H/內离呻亍PltfASFl咻 RZ.ZrAlD 厲MlM-E=a 3恃&时时廿FiJimPS肚枯 H.WtQUDn ior MJ 2.TL叩N.wrVP1J计俪R4M*TaP1flP3 *TIFIJQFl?円网小斤 MMT1T1口n nnlTTnl

11、TT睥口 wOEwOE QriQri K K c c w w i i H H G G G G Q Q o o Q QG G 9 9I LIBI调节RV1,阻值越来越小:RV1阻值一半:RV1阻值最小:2.4电路实物图第三章软件设计实现3.1软件程序内容见附录 P183.2模块分析1. 显示模块:用 1602 液晶显示,设置其技术参数为:拨复 位开关总能回到初始状态,使用 8 位数据,显示两行,使用 5*7 的字型,显示器开,光标关,字符不闪烁,字符不动。2.矩阵键盘模块:当扫描到 1 号键盘,进入到流水灯模块; 扫描到 2 号键盘时,进入交通灯模块;扫描到 3 号键盘时,进入 扩展灯模块;当扫

12、描到 4 号键盘,进入到循环灯模块;当扫描到 5 号键盘,进入到三色联动模块;按下复位键后,回到初始状态。3.三色联动模块:通过设置各种灯在不同的时间段亮灭,并 且各自亮的时间长不一致, 形成人们视觉上的观察, 看到的现象是 灯由亮到暗的变化过程 ,由此可形成各种不同的混色。4.交通灯模块:由延迟控制时间变化,设置两路交通灯,红 灯亮 18S ,绿灯亮 17S ,黄灯 1S,A 路交通灯的红灯亮的时间等 于 B 路交通灯黄灯亮的时间加上绿灯亮的时间,由此形成联动状 态。5.流星雨模块:通过控制每个灯的亮灭之间的时间来实现, 从而给人视觉上的效果,形成流星雨。温度显示模块:通过 DS18B20温

13、度传感器实时采集温度 通过 1602 芯片显示当前温度。3.3程序流程图4 T基本部分:強和3対砂74 T取码指针送18行控制口取码指针取当前列显示字码 第一个字节取当前列显示字码 第一个字节送18行控制口取当前列显示字码 第二个字节取当前列显示字码 第二个字节Led点阵:字码表初址赋值字码表初址赋值送916行控制口送列控制码取当前列显示字码 地二个字节取当前列显示字码 地二个字节送916行控制口送列控制码送916行控制口送列控制码送916行控制口送列控制码Y|N第四章系统测试4.1软件调试在编程过程中, 遇到了很多难题。 流水灯和交通灯子程序都编的比较顺利, 三色联动因为要涉及到调节占空比,

14、 刚开始的时候感到无从下手, 后来又想到利 用定时中断, 通过产生不同占空比的方波信号来控制灯的亮暗程度。 但是这样仍 然没有成功。后来在同学的帮助下,利用随机函数调节占空比,调试成功,达到 了预想的效果。 在编写键盘扫描程序的之前, 我查看了很多资料, 先弄清楚了矩 阵键盘的工作原理, 然后确定了一个简单有效的键盘扫描算法, 调试成功, 启动 键盘扫描程序, 能够准确判断出键值并进入相应的功能模块。 后来把全部功能整 合到一个总程序中,就遇到了麻烦。首先在调用子函数的时候,由于各场景由 while (1)控制,在子函数中不能及时跳出循环,后来在删除了 while (1 )死 循环之后, 当检

15、测到任一其它按键后就能立即跳出循环。 刚开始我们的交通灯子 程序用到了定时中断, 在写主函数的时候, 当矩阵键盘按下后交通灯子程序不能 执行,后来简化了交通灯程序,改用延时,交通灯功能模块就能正常运行了。还 有关于 LCD 显示的,之前是把对其初始化的调用放在子函数中,这样在每次调 用时都初始化一次, 使得不能很好地变化, 后来把初始化放到了主函数里, 则能 正常跳变。在此次课程设计中碰到了很多困难 , 经过老师和同学的帮助 ,还有自己 在网上查资料都能够得以解决。 使我深深的体会到, 只要坚持不懈, 没有什么事 情是不能解决的。4.2硬件测试在硬件电路搭建完毕后,我们开始进行测试,成功烧写

16、52 芯片后,发现灯 的亮灭不受控制, 而且 1602 液晶显示屏也是没有显示内容。 在我们反复的检查, 另外有对应仿真结果逐一排查, 发现我们的电路有一些问题, 因为我们的刚开始 的电路 AT89C52 的 P0 口接的是排阻,而且排阻的另一端接到了显示屏的端口, 犯了很大的错误,检查发现后,我们立刻做了修正,在 P1 口接了 10k 的电阻, 电阻的另一端接到 +5V 的电源,同时 P1 口接到显示屏的端口。 这样又进行测试, 发现显示屏可以正常的显示, 灯也可以正常的工作。 给老师检查中, 发现我们的 复位键不管用, 之前没有太注意这个, 幸好老师提醒我们, 发现我们少接了一个 电容。之

17、后我们又做了调整,终于电路正常工作。同时,在调节滑动变阻器使显 示屏显示的过程中也是很大的考验, 需要有耐心, 不断转滑动变阻器, 最后才使 得整个电路顺利进行。在本次课程设计中,我们进一步了解了 89C52 各引脚的功能以及 89C52 的内部逻辑结构,深入掌握了 89C52 显示电路的基本功能及编程方法,同时深 入了解了 89C52 等芯片以及键盘的工作方式和接口功能。第五章 心得体会在本次单片机课程设计中,让我感触很深,从刚开始的简单的控制灯的程 序开始, 逐步地增加开关控制, 再将这些连接起来, 真的一步一步地发现单片机 很有趣。在课程设计课中的头两个星期我很困惑, 因为我不懂怎么把很

18、多个功能 放在一起,为此我问了一些学的好的同学,他们认真的讲解让我有了一些启发, 后来我又自己买了一块单片机自己试着编写一个程序达到自己的预期结果, 尽管 这个过程非常的枯燥, 有时候编不出来或者想的跟试验结果不同时, 又要重新检 查语句,看每条语句的功能,又通过在网上查阅很多的资料来解决自己的问题 对于我来说, 我比较偏向于动手, 在硬件的搭建中还算是比较顺利的。 还有在这 两个多月里, 我学到了很多的东西, 看书本仅仅只是理论知识, 而将所学的理论 知识与实践结合的过程中, 才发现自己学的理论知识远远不够。 尤其是在编程时 往往能想到怎么做, 却不知怎么编写, 我感觉这是最难的, 在心里真

19、的是想要去 认真的完成,可是却因为克服不了自己的恐惧,总觉得很难,就拖了好几天,不 过庆幸的是我还是坚持了过来, 我觉得做什么事都必须要有信心和耐心, 这样做 事才会更有效率。 在设计的过程中, 我也深刻地感受到了做一个完整的项目靠一 个人的力量是很辛苦的, 必须和自己的队员一起商量讨论, 而且分工合作, 这样 每个人做自己所擅长的一部分,再合起来就会达到事半功倍的效果。通过这次课程设计, 我更加理解了单片机这门课, 也将课堂知识运用到实践 中,不断地积累, 让我对单片机产生了很大的兴趣, 我想接下来我还会继续学习 这门课,不断地提升自己的编程能力, 让自己的思考能力增强。 所以我认为这次 的

20、课程设计意义很深,和另外两位同学的共同学习、配合、努力的过程很愉快, 另外还要感谢老师的耐心辅导!_*因为这次我们单片机课程和单片机课程设计是同一个学期的课程, 在开始单 片机课程设计的时候单片机基础也没什么, 班上有些人参加了蓝桥杯的看着他们 一开始就能自己编程序觉得很厉害, 自己只能慢慢从基础开始学习, 难免有点心 浮气躁。但是好在课程时间比较长,自己慢慢的看书查资料,和组员慢慢磨合, 按照课本的知识我们也能自己编出简单的程序。 刚开始的课堂实验开关控制灯等 等到矩阵键盘都是给课程设计打基础的,课程设计也是将这些基础知识联系起 来,既考验了你的耐心又考验你的细心, 一旦错了一点点小地方最后

21、的结果都出 不来。毕竟小组一起做课程设计能学到课堂学不到的知识, 虽然我们没有别人那 么多的花样但是我们也有尽力完成, 也有学到实践的重要性。 当然在实验过程中 也出现了很多问题, 这些问题都是值得我们重视的, 比如复位电路忘记接电容导 致我们复位电路反应很慢甚至没反应, 显示屏接上不亮, 后来才知道要接滑动变 阻器并调节才能亮。 中间出现问题也有咨询过其他人, 他人的帮助对我们也很重 要,总之,最终实物结果能出来,绝不是一个人的结果,小组的配合,他人的帮 助,老师的指导也是至关重要的。 这次单片机课程设计虽然说纠结过烦躁过但是 将单片机的知识系统化学习了一遍,自己的动手能力也培养了, 和小组

22、一起学习, 让我觉得意义很大。 所以不管做什么都在沉下心来慢慢做动手 做,不管结果怎么样你也尽力了。_*在学习单片机这门课程之前, 就听说过这门课程的重要性和学好这门课程的 关键,多做单片机实验。因此对这门课程学之前就特别害怕。现在单片机课程已 经结束,需要来好好的反思和回顾总结下了。 做实验中, 遇到问题应该是准备不 充分吧。一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程, 完成作业, 导致每次时间都有些仓促。 还有就是自己基础比较差, 遇到问题是依 赖性也很大, 在团队下完成实验。 通过这学期的单片机实验的学习, 发现了自己 的问题,需要的的还有很多,包括搭建电路图和测试硬件

23、电路,需要很大耐心, 培养自己接受新知识的自学能力。 也通过这次学习在以后的生活和学习中相信只要有足够勇气和耐心, 遇到的问题总会被解决。 最后感谢老师在我们遇到困难时 的帮助和点播第六章 参考文献1. 单片机技术 - 课程设计与项目实例 中国电力出版社 作者: 李海滨等 2009.102 Proteus 教程 -电子线路设计、制版与仿真 清华大学出版社 作者:朱清彗 2008.93 51 系列单片机设计实例 (第 2 版) 北京航空航天大学出版社 作者:楼然苗 李光飞附录:程序第一部分程序:#include#include#include#include#define uchar unsig

24、ned char#define uint unsigned int#define bit(n) (1n)extern unsigned char key_val;uint speed=50;char yellow=5,green=20,red=20;/ 三色定时控制量uchar hour,minute,second;uchar pwmctr; / 占空比控制变量uchar pwmctr_green=5;ucharlxytable=0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00,0 x01,0 x03,0 x07,0 x0f,0 x1f,0 x3f

25、,0 x7f,0 xff;uchar lxyctr=16;bit flag_green=1;bit flag_yellow;bit flag_red;bit flag_lsd=1;bit flag_jtd; bit flag_pwmled;bit flag_lxy;sbit Red=P1A0;sbit yel=P1A1;sbit gre=P1A2;sbit RED=P1A3;sbit YEL=P1A4;sbit GRE=P1A5;sbit buzzer=P0A0;void disp_time()second+;if(second=10)buzzer=1;if(second=60) second

26、=0;minute+;if(minute=60)buzzer=1;minute=0;hour+;if(hour=24)hour=0;L1602_char(2,9,hour/10+0 x30);L1602_char(2,10,hour%10+0 x30);L1602_char(2,12,minute/10+0 x30);L1602_char(2,13,minute%10+0 x30);L1602_char(2,15,second/10+0 x30);L1602_char(2,16,second%10+0 x30);main()buzzer=0;initkeypad();L1602_init();

27、TMOD=0 x11;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;L1602_string(1,1,SPD);L1602_string(2,1, );L1602_char(1,5,speed/10+0 x30);L1602_char(1,6, );while(1)kevent();if(key_val=15)if(flag_lsd)L1602_char(1,4,*);L1602_char(1,6,*);init

28、keypad();while(key_val!=15)initkeypad();do kevent();while(key_val=16);if(key_val=3)speed=speed+10;if(key_val=7)speed=speed-10;L1602_char(1,5,speed/10+0 x30);initkeypad();L1602_char(1,4, );L1602_char(1,6, );if(key_val=14)initkeypad();while(key_val!=14)L1602_char(2,11,*);do kevent();initkeypad();while

29、(key_val=16);if(key_val=3) hour+;if(key_val=7) hour-;if(key_val=11)uchar a=0,i=2;L1602_char(2,14,*);while(i-)initkeypad();do kevent();while(key_val=16); a=10*a+key_val;if(i)minute=10*key_val+minute%10;minute=a;L1602_char(2,14, );L1602_char(2,11, );if(key_val=0)L1602_string(1,1,SPD);initkeypad();L160

30、2_string(2,1, );L1602_char(1,5,speed/10+0 x30);L1602_char(1,6, );flag_lsd=1;flag_jtd=0;flag_pwmled=0;flag_lxy=0;initkeypad();if(key_val=1)P1=0 xff;flag_lsd=0;flag_jtd=1;flag_pwmled=0;flag_lxy=0;if(key_val=2)L1602_string(1,1,);L1602_string(2,1,);L1602_string(1,1,pwm);P1=0 xff;flag_lsd=0;flag_jtd=0;fl

31、ag_pwmled=1;flag_lxy=0;initkeypad();if(key_val=3)L1602_string(1,1,);L1602_string(2,1,);L1602_string(1,1,lxy);P1=0 xff;flag_lsd=0;flag_jtd=0;flag_pwmled=0;flag_lxy=1;initkeypad();void t0() interrupt 1 uchar ledcount;uchar timecount;uchar lxycount;uchar i;uchar j;TH0=(65536-10000)/256;TL0=(65536-10000

32、)%256;ledcount+;timecount+; lxycount+; if(timecount=100) timecount=0;buzzer=0;disp_time();if(flag_jtd)if(flag_green)GRE=0;Red=0;L1602_string(1,1,RED:);L1602_char(1,5,green/10+0 x30);L1602_char(1,6,green%10+0 x30);L1602_string(2,1,GRE:);L1602_char(2,5,green/10+0 x30);L1602_char(2,6,green%10+0 x30);gr

33、een-;if(green0)green=20;flag_green=0;flag_yellow=1;GRE=1;YEL=0;Red=1;gre=0;if(flag_yellow)YEL=0;gre=0;L1602_string(1,1,GRE:);L1602_char(1,5,(yellow+15)/10+0 x30);L1602_char(1,6,(yellow+15)%10+0 x30);L1602_string(2,1,YEL:);L1602_char(2,5,yellow/10+0 x30);L1602_char(2,6,yellow%10+0 x30);yellow-;if(yel

34、low5)gre=0;L1602_string(1,1,GRE:);L1602_char(1,5,(red-5)/10+0 x30);L1602_char(1,6,(red-5)%10+0 x30); elseyel=0;L1602_string(1,1,YEL:);L1602_char(1,5,red/10+0 x30);L1602_char(1,6,red%10+0 x30); L1602_string(2,1,RED:);L1602_char(2,5,red/10+0 x30);L1602_char(2,6,red%10+0 x30);red-;if(red=4)gre=1;yel=0;

35、if(red100) ledcount=0;P1=bit(i); i+;if(i=8)i=0;if(flag_lxy)if(lxycount=lxyctr)lxycount=0;P1=lxytablej;j+;if(j=16)j=0;lxyctr-;if(lxyctr=0)lxyctr=16;void t1() interrupt 3 uchar count_pwm,count;TH1=(65536-1000)/256;TL1=(65536-1000)%256; if(flag_pwmled)count_pwm+;count+;if(count_pwm=pwmctr)Red=0;yel=1;

36、if(count_pwm=pwmctr_green) gre=1;if(count_pwm=10)count_pwm=0;Red=1;yel=0;gre=0;if(count=200)count=0;if(pwmctr=10)pwmctr=0;pwmctr+;第二部分程序:#include#define uchar unsigned char#define uint unsigned intsbit rs=P2A0;sbit rw=P2A1;sbit lcden=P2A2;/ 液晶使能端定义变量sbit DATA = P2A3; /DS18B20 接入口uchar FLAG_DIS=0;uch

37、ar bai_18b20,shi_18b20,ge_18b20,num; /bit flag_Negative_number ;/ 负数标志uchar code table=tempreture: ; /提示语sbit speaker=P2A4;signed char shangxian=35;signed char xiaxian=2;signed char lala;void delay_ms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay(uint num)while(num-) ;void write_lcd_com(

38、uchar com)P0=com;rs=0;rw=0;lcden=0;delay_ms(1);lcden=1;delay_ms(1);lcden=0;void write_lcd_date(uchar date)rs=1;rw=0;lcden=0;P0=date;delay_ms(1);lcden=1;delay_ms(1);lcden=0;void InitDS18B20(void)/ 传感器初始化void lcd_init()write_lcd_com(0 x38);write_lcd_com(0 x0c);write_lcd_com(0 x06);write_lcd_com(0 x01)

39、;uchar x=0;DATA = 1; /DQ 复位delay(10); / 稍做延时DATA = 0; / 单片机将 DQ 拉低delay(80); / 精确延时 大于 480us /450DATA = 1; / 拉高总线delay(20);x=DATA; / 稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败delay(30);给脉冲信号给脉冲信号ReadOneChar(void)uchar i=0;uchar dat = 0; for (i=8;i0;i-) DATA = 0; / dat=1;DATA = 1; / if(DATA) dat|=0 x80;delay(8);

40、return(dat);void WriteOneChar(uchar dat)uchar i=0;for (i=8; i0; i-)DATA = 0;跳过读序号列号的操作启动温度转换跳过读序号列号的操作读取温度寄存器等 (共可读 9 个寄存器) 前DATA = dat&0 x01;delay(10);DATA = 1; dat=1;delay(8);int ReadTemperature(void)uchar a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0 xCC); /WriteOneChar(0 x44); /

41、 Init_DS18B20();WriteOneChar(0 xCC); /WriteOneChar(0 xBE); /两个就是温度a=ReadOneChar();/ 低位b=ReadOneChar();/ 高位t=b;t=8;t=t|a;if(b&0 x80)t=t+1;flag_Negative_number = 1;else flag_Negative_number = 0; tt=t*0.0625;t= tt*10+0.5;return(t);void dis_D18B20(void)int temp;temp=ReadTemperature();/ 读温度bai_18b20=temp

42、%1000/100;/ 显示十位shi_18b20=temp%100/10;/ 显示个位 ge_18b20=temp%10;/ 显示十分位if(flag_Negative_number)/ 负数write_lcd_date(0 xDF);if(bai_18b20=0) / 十位为 0 ,则不显示十位write_lcd_com(0 x80+0 x40);write_lcd_date(0 x2D);write_lcd_date(0 x30+shi_18b20);write_lcd_date(0 x30+ge_18b20);write_lcd_date(0 xDF);write_lcd_date(0

43、 x43);elsewrite_lcd_com(0 x80+0 x40);write_lcd_date(0 x2D);write_lcd_date(0 x30+bai_18b20);write_lcd_date(0 x30+shi_18b20);write_lcd_date(0 x43);write_lcd_date(0 xDF);else / 正数if(bai_18b20=0) / 十位为 0 ,则不显示十位write_lcd_com(0 x80+0 x40);write_lcd_date(0 x30+shi_18b20);write_lcd_date(0 x2E);write_lcd_da

44、te(0 x30+ge_18b20);write_lcd_date(0 xDF);write_lcd_date(0 x43);elsewrite_lcd_com(0 x80+0 x40);write_lcd_date(0 x30+bai_18b20);write_lcd_date(0 x30+shi_18b20);write_lcd_date(0 x2E);write_lcd_date(0 x30+ge_18b20);write_lcd_date(0 x43);write_lcd_date(tablenum);lala=ReadTemperature();if(lalashangxian)sp

45、eaker=1;elsespeaker=0;void main()lcd_init();TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1; / 开总中断write_lcd_com(0 x80);for(num=0;num11;num+)delay_ms(10);/ dis_D18B20();while(1)if(FLAG_DIS=1)FLAG_DIS=0;dis_D18B20(); / 读温度并显示 void t0(void) interrupt 1 using 0 /uchar count;TH0=

46、(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=20)/ 每一秒钟读一次温度传感器温度 FLAG_DIS=1;count=0;第三部分程序:#include#include#define bit(n) (10;i-)da1=date1&0 x01;date1=date11;da2=date2&0 x01;date2=date21;da3=date3&0 x01;date3=date31;da4=date4&0 x01;date4=date41;da5=date5&0 x01;date5=date51;da6=date6&0 x01

47、;date6=date61;clk=0;_nop_();_nop_();clk=1;clk=0;_nop_();_nop_();clk=1;main()TMOD=0 x01;TH0=(65536-3000)/256;TL0=(65536-3000)%256;TR0=1;EA=1;ET0=1;while(1);void t0() interrupt 1unsigned char count,count1;TH0=(65536-3000)/256;TL0=(65536-3000)%256;wr595(tablecount1+1,tablecount1,bit(count)%256,bit(coun

48、t)/256, table1count1+1,table1count1);count+;count1=count1+2;if(count=16)count=0;if(count1=32)count1=0;第四部分:电压表程序:#include#includesbit RS = P3A5;/ 定义端口sbit RW =卩3八6;过量程标志位电压正负标志位sbit EN = P3A7;sbit k2 = P2A1;sbit UNR = P0A0;sbit OVR = P0A1;/sbit POL = P0A2;/#define RS_CLR RS=0#define RS_SET RS=1#defi

49、ne RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P1#define BCDMA P2#define WEIMA P3unsigned char table6=0,0,0,0,0,0;void DelayUs2x(unsigned char t)sbit k1 = P2A0;/控制继电器从而控制电压增益while(-t);void DelayMs(unsigned char t)while(t-)/ 大致延时 1mSDelayUs2x(245);DelayUs2x(245);bit LCD_Check_Busy(void)DataPort= 0 xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0 x80);void LCD_Write_Com(unsigned char com)/ while(LCD_Check_Busy(

温馨提示

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

评论

0/150

提交评论