济南大学单片机课设_第1页
济南大学单片机课设_第2页
济南大学单片机课设_第3页
济南大学单片机课设_第4页
济南大学单片机课设_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、 济南大学单片机原理及应用设计报告信息科学与工程学院课程设计报告设计题目 交通灯控制 课程名称 单片机原理及应用 2016年7月13日 济南大学单片机原理及应用设计报告 目录摘要2第一章 设计目的与要求3第二章 设计方案42.1 电源提供方案42.2 显示界面方案42.3 输入方案4第三章 单片机硬件系统电路设计53.1 总体设计53.3显示及其驱动模块:6第四章 系统软件设计104.1软件总体设计104.2软件主要子程序设计:1117第五章 仿真结果191.温度设计仿真电路如示:19图1 温度仿真电路图192. 温度仿真电路图倒计时和红绿灯设计仿真电路19图2 温度仿真电路图倒计时和红绿灯设

2、计仿真电路193.总体设计仿真电路20图4 总体仿真电路图20第六章 设计总结21附录22 第 1 页 摘要 本系统由单片机系统、键盘、LED显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。关键

3、词:单片机;交通灯;温度显示;倒计时显示第 1 页 第一章 设计目的与要求 要求:显示时间,温度,能通过按键设置初值。采用汇编或C语言编程。 具体要点如下: 1、 以AT89S51单片机为核心设计交通灯,掌握单片机的软件设计及调试方法。 2、时间定时:本项目为典型的LED显示和中断定时电路。利用定时器T0产生每10ms一次的中断,每100次中断为1s。 3、交通规则:东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。对两个方向分别显示红、绿、黄灯,并显示相应的剩余时间。值得注意的是,A方向红灯时间=B方向绿灯时间+黄灯缓冲时间。 4、温度: DS18B20传感器进行采集、转换数据

4、。 5、显示:要求用动态数码管或静态数码管。 第二章 设计方案 本设计以单片机为核心,以LED数码管作为倒计时指示,根据设计的要求考虑了各功能模块的几种设计方案,以求最佳方案,实现实时显示系统各种状态,系统还增设紧急情况处理及高峰期时间时间调整,以提高效率,缓减交通拥挤。系统总体设计框图如图所示。 单片机最小系统 温度 键 盘输 入 模 块 倒计时时间显示 电源交通灯(LED显示)2.1 电源提供方案 为使模块稳定工作,须有可靠电源。本次设计考虑了两种电源方案:方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路

5、电平。方案二:采用单片机控制模块提供电源。该方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。综上所述,选择第二种方案。2.2 显示界面方案 该系统要求完成倒计时功能。基于上述原因,本次设计考虑了两种方案:方案一:完全采用点阵式LED显示。这种方案功能强大,可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。方案二:完全采用数码管显示。这种方案优点是实现简单,可以完成倒计时功能。缺点是功能较少,只能显示有限的符号和数码字符。根据本设计的要求,方案二已经满足了要求,所以本次设计采用方案二以实现系统的显示功能。2.3 输入方案这里同样讨论了两种方案:方案一:采用815

6、5扩展I/O口、键盘及显示等。该方案的优点是使用灵活可编程,并且有RAM及计数器。若用该方案,可提供较多I/O口,但操作起来稍显复杂。方案二:直接在I/O口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的端口资源还比较多,我们使用四个按键,分别是P0.6、P2.4、P1.6、P3.7依次完成南北强行、东西强行重置倒计时等功能。由于该系统是对交通灯及数码管的控制,只需用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用,故选择方案二。 第三章 单片机硬件系统电路设计 硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现交通灯基本功能以外,主要还要考虑如下几个因素:系统稳定度

7、;软件编程的易实现性;系统其它功能及性能指标;因此硬件设计至关重要。现从各功能模块的实现逐个进行分析探讨。3.1 总体设计 本设计以单片机为控制核心,采用模块化设计,共分以下几个功能模块:单片机控 制系统、键盘及状态显示、倒计时模块、温度显示等。 温度采集选用DS18B20芯片。 单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机振荡电路、复位电路等组成。 键盘及状态显示,开关键盘输入交通灯初始时间,通过单片机P1输入到系统。 系统采用双数码管倒计时计数功能,最大显示数字99。3.2单片机最小系统1振荡电路 AT89C51是内部具有振荡电路的单片机,只需在18

8、脚和19脚之间接上石英晶体,给单片机加工作所需直流电源,振荡器就开始振荡起来。振荡电路就为单片机工作提供了所需要的时钟脉冲信号,是单片机的内部电路、单片机的内部程序(若有)开始工作。振荡电路不工作,整个单片机电路都不能正常工作。AT89C51常外接6MHz、12MHz的石英晶体,18脚和19脚分别对地接了一个20pF的电容,目的是防止单片机自激。若从18脚输入外部时钟脉冲,则19脚接地。2复位电路 复位电路就是在RST端(9脚)外接的一个电路,目的是使单片机上的电开始工作时,内部电路从初始状态开始工作,或者在工作中人为让单片机重新从初始状态开始工作。在时钟工作的情况下,只要复位引脚高电平保持在

9、两个机器周期以上的时间,AT89C51便能完成系统重置的各项工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从地址0000H处读入程序代码而执行程序。单片机最小系统电路如图所示: 单片机最小系统电路原理图3.3显示及其驱动模块:1.键盘与状态显示功能:键盘在本设计中用于紧急情况的手动控制装置,以及定时时间的设置等功能,起到了不可缺少的重要作用。当定时器定时为1秒时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时1秒,在显示黄灯的下一个时间,这样依次把所有的时间显示完后在重新给时间计数器赋初值,重新进入循环。按键设计仿真电

10、路如图所示: 按键设计仿真电路 2.红绿灯显示: 东西、南北两干道交于一个十字路口,各个路口有一个交通灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方案如表: 80s 3s 60s 3s . 东西道 绿灯亮 黄灯亮 红灯亮 红灯亮 . 南北道 红灯亮 红灯亮 绿灯亮 黄灯亮 .说明: (1)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行时间为80秒。 (2)黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换。 (3)当东西

11、方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行,时间为60秒。 (4) A方向红灯时间=硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现交通灯基本功能以外,主要还要考虑如下几个因素:系统稳定度;软件编程的易实现性;系统其它功能及性能指标;因此硬件设计至关重要。现从各功能模块的实现逐个进行分析探讨。3. 倒计时计数功能: 利用定时器T0产生每10ms一次的中断,每100次中断为1s。用共阳数码管进行动态显示。 定时器内部结构: 方式寄存器: 方式寄存器TMOD是一个逐位定义的8位寄存器,是只能字节寻址的寄存器,字节地址为89H。 其格式如下: 4

12、. 数码管动态显示 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管

13、的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。本次设计选用共阳数码管如下图所示: 5.温度测量功能: 本次采用 DS18B20芯片进行温度采集系统设计  DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能无须外部器件;  可通过数据线供电,电压范围为3.0-5.5; 温

14、度以9或12位数字读数;  零待机功耗;  用户可定义报警设置;  报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;  负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;  DS18B20详细引脚功能描述如下表所示 序号 名称 引脚功能描述 1 GND 电源地 2 DQ 数字信号输入/输出端 3 VDD外接供电电源输入端(在寄生电源接线方式时接地)DS18B20的测温原理:器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;

15、高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在55所对应的一个基数值。  减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直

16、到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。 DS18B20可以采用两种方式供电: 一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。 本次设计采用寄生电源供电方式,即VDD端

17、接地。 第四章 系统软件设计4.1软件总体设计软件总体设计主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的初始化,发送显示数据,同时对键盘进行扫描,等待外部中断,以及根据所需要的功能进行相应的操作。其流程图如图 开始 初始化 键扫描,取键值 判断当前状态温度显示红绿灯 倒计时 设置键 盘 状 态 状态显示 是否改变状态?是否 结束 软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的

18、可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。这里选用了移值性好、结构清晰、能进行复杂运算的C语言来实现编程。相应程序如下:void main()TMOD=0X01;/T0方式1TH0=(65536-10000)/256;TL0=(65536-10000)%256; /延时10ms,设计初值10000EA=1;ET0=1;TR0=1;P1=0Xf3;/ 东西通行 Init_Com(); while(1) displaydjs(); dsreset(); / tmpchange(); delay(1); tmpwritebyte(0xcc); / 0xcc送入 tmpwrite

19、byte(0x44); / 0x44送入 display(tmp(); 4.2软件主要子程序设计: 1.键盘状态判断: 开始 键按下 键3按下下下键4按下否键2按下下否否是否键1按下 返回是是是是东西强行南北强行数值增加数值减少 在设置状态下,主程序中不断对按键进行扫描,当检测到按键时执行情况如上图。当遇到紧急情况时:按下按键1开始东西强行,按下按键2南北强行。当遇到高峰期时:按下按键3对倒计时进行增加设置(初始值设为99),当检测到按键4键按下的时候就进行减少设置。按键扫描程序如下:void key() if(k1=1) /对按键1进行检测,不满足条件则往下执行delay(10); if(k

20、1=1) e2=1; /直接改变I/O口的值,进行按键改变操作 e0=0; e3=1; e5=0; P2=0XC0; sec_dx=80; sec_nb=80; if(k2=1) /对按键2进行检测,不满足条件则往下执行 delay(10);if(k2=1) e2=0; e0=1; e3=0; e5=1; P2=0XC0; sec_dx=60; sec_nb=60; if(k3=0) /对按键3进行检测,不满足条件则往下执行 delay(10);if(k3=0) sec_dx=99; sec_nb=99;if(k4=0) /对按键4进行检测,不满足条件则往下执行delay(10);if(k4=

21、0) sec_dx=50; sec_nb=50;2倒计时设置:利用定时器T0产生每10ms一次的中断,每100次中断为1s。用共阳数码管进行动态显示。 开始 初始化 设定初值 绿灯显示,倒计时 黄灯闪烁 红灯显示,倒计时有无按键状态改变?是i进入按键设置新状态是否 返回/*数码管倒计时显示*/void displaydjs() buf1=(sec_dx-3)%10; /第1位 东西秒十位buf2=sec_dx/10; /第2位 东西秒个位buf3=sec_nb%10; /第3位 南北秒十位buf0=(sec_nb-3)/10; /第4位 南北秒个位P0=tablebufled;delay(2)

22、;/先延时,提前显示一位了P2=dig;dig=_crol_(dig,1);led+;/*定时T0*/void time0(void) interrupt 1 / TH0=(65536-10000)/256;TL0=(65536-10000)%256;b+;if (led=4) led=0;dig=0x01; if(b=100) / 定时器中断次数。 b=0;sec_dx-;sec_nb-;key(); /*南北黄灯闪烁判断*/if(sec_nb<=3)&&(sec_nb>=0)&&time=0) yellowled_dx=1;/南北黄灯亮 e2=0

23、; delay(300); yellowled_dx=0; if(sec_dx<=3&&(sec_dx>=0)&&time=1) yellowled_nb=1;/南北黄灯亮 e5=0; delay(300); yellowled_nb=0; if(sec_dx=0|sec_nb=0) /东西或南北先到达1S时即开始重新计时 sec_dx=set_timedx;sec_nb=set_timenb; /第一次循环结束重置 if(time=1)P1=0XF3; /东西通行 elseP1=0xde; /南北通行time=!time; /取反 3温度系统设置:

24、 当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在55所对应的一个基数值。  减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计

25、数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。温度测量程序如下:void Init_Com(void) /进行初始化 TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-; /*读取一个bit*/bit tmpreadbit(void) /读取一个bit uint i; bit dat; DS=0;i+;

26、/i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat); /*读取一个byte date*/uchar tmpread(void) / uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat); /*往ds18b20写入一个byte*/void tmpwritebyte(uchar dat) /write a by

27、te to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /写 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /写 0 i=8;while(i>0)i-; DS=1; i+;i+; /*获取温度*/ uint tmp() /获取温度 float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwrit

28、ebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /两个字节组成一个变量 temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp;/*温度显示*/void display(uint temp)/显示程序 uchar A1,A2; A1=temp/100; A2=temp%100/10; P2=0x40; P3=tableA1;/显示十位 delay(2); P2=0X80; P3=tableA2;/显示个位 delay(2);  第五章 仿真结果1.温

29、度设计仿真电路如示: 图1 温度仿真电路图2. 温度仿真电路图倒计时和红绿灯设计仿真电路如图2所示: 图2 温度仿真电路图倒计时和红绿灯设计仿真电路 3.总体设计仿真电路如图3所示: 图4 总体仿真电路图 第六章 设计总结 进行了一学期的单片机学习,在此次课程设计中我选择设计了模拟交通灯,主要功能有温度检测并显示、红绿灯控制、数码管倒计时显示、键盘控制。在整个设计过程中,也将这些内容进行分模块设计。 红绿灯控制时,通过控制led灯即可调节红绿灯的亮灭状态。而在倒计时是需要通过控制定时器T0来定时:利用定时器T0产生每10ms一次的中断,每100次中断为1s。然后通过数码管的动态显示,在轮流显示

30、过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 通过对按键的不断扫描,对按键的状态进行判断。当满足某一状态时,则执行相应的程序。 在温度检测中,主要用了芯片DS18B20。其中,个人认为最重要的内容便是进行初始化,只有当送数的时间足够,才能保证数据的正常采集与显示。否则,只会显示初始值85摄氏度。尽管在这个过程中出现了很多“波折”,但通过调试之后,温度能够正常的显示。 整个仿真过程中,通过简单的元器件的选择与连线就可以实现对电路图的设计。然而在进一步程

31、序指令修改过程中又遇到些问题,不同的设计程序会对电路有不同的影响,从简单的对一个模块程序调整到多个模块进行整合需要对程序的参数和程序指令、顺序进行认真的判断与分析。在使用Proteus软件的过程中感受到了仿真带来的便利,更高的应用需要我们进一步的探索。 电路的硬件设计和软件程序有着紧密的联系。一方面是在硬件电路连接中应想着程序的设计思路;另一方面是在程序设计中要以硬件电路的连接方式为基础。同时,在设计过程中尽量要保持严谨性。比如:要对倒计时进行控制显示,一方面要想着对T0的模式进行如何选择,另一方面要思考怎么将控制的值显示出来。所以整个设计过程中需要认真与耐心。通过设计过程中的调试,发现自己的

32、想法会和仿真结果有区别,但在一番修改与调试之后,基本能够达到自己的要求,所以本次设计也算是比较成功。从中,我在这次课程设计中也清楚的意识到,对一门课,尤其是像单片机一类要求操作能力比较强的课,不能仅仅局限于课本知识的学习与积累,更多的是能够在实践中去发现问题,然后再去解决问题。设计过程中感觉到自己的不足,然后经过查阅资料、和同学交流思想,明白自己应该改进的地方,并在这个改进的过程中逐步的提高自己分析与解决问题的能力。 附录#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define ui

33、nt unsigned intsbit DS=P17; /define interfaceuint temp; / variable of temperaturesbit k1=P07;sbit k2=P24;sbit k3=P16;sbit k4=P37;sbit e0=P10;sbit e2=P12;sbit e3=P13;sbit e5=P15;unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8;sbit yellowled_nb=P

34、14;/南北黄灯sbit yellowled_dx=P11;/东西黄灯uchar data dig;/位选uchar data led;/偏移量uchar data buf4;uchar data sec_dx=80;/东西数码指示值uchar data sec_nb=80;/南北数码指示值uchar data set_timedx=60;uchar data set_timenb=60;/倒计时设置的键值保存uchar data b;/定时器中断次数bit time;/灯状态循环标志void displaydjs();/显示子程序void delay(uint count) /delay u

35、int j,k;for(j=0;j<count;j+)for(k=0;k<114;k+);/*按键检测*/void key() if(k1=1)delay(10);if(k1=1) e2=1; e0=0; e3=1; e5=0; P2=0XC0;/ delay(1000); sec_dx=80; sec_nb=80; if(k2=1)delay(10);if(k2=1) e2=0; e0=1; e3=0; e5=1; P2=0XC0;/ delay(1000); sec_dx=60; sec_nb=60; if(k3=0)delay(10);if(k3=0) sec_dx=99;

36、sec_nb=99;if(k4=0)delay(10);if(k4=0) sec_dx=50; sec_nb=50;/*定时T0*/void time0(void) interrupt 1 / TH0=(65536-10000)/256;TL0=(65536-10000)%256;b+;if (led=4) led=0;dig=0x01; if(b=100) / 定时器中断次数。 b=0;sec_dx-;sec_nb-;key(); /*南北黄灯闪烁判断*/if(sec_nb<=3)&&(sec_nb>=0)&&time=0) yellowled_d

37、x=1;/南北黄灯亮 e2=0; delay(300); yellowled_dx=0; if(sec_dx<=3&&(sec_dx>=0)&&time=1) yellowled_nb=1;/南北黄灯亮 e5=0; delay(300); yellowled_nb=0; if(sec_dx=0|sec_nb=0) /东西或南北先到达1S时即开始重新计时 sec_dx=set_timedx;sec_nb=set_timenb; /第一次循环结束重置 if(time=1)P1=0XF3; /东西通行 elseP1=0xde; /南北通行time=!tim

38、e; /取反 void Init_Com(void) TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;/*读取一个bit*/bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);/*读取一个byte date*/uchar tmpread(void) / uchar

温馨提示

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

评论

0/150

提交评论