第一篇:毕业论文《关于单片机80C51船舶声光报警灯柱设计》
南通纺织职业技术学院毕业设计(论文)
基于89C51船舶报警灯柱的设计
董永贤
班 级: 09电信 专 业:电子信息工程技术(智能电子)所 属 系: 机电系 指导老师: 邱宏
完成时间:201
1年10月12日-------2011年11月22日
南通纺织职业技术学院
目录
摘要及关键词---------------------2 第一章:绪论---------------------3 1.1 课题背景----------------3 1.2 主要内容----------------3 第二章:产品的功能需求及方案的确定-------------------4 2.1 产品功能需求分析----4 2.2 课题方案的确定-------5 第三章:硬件电路设计----------6 3.1 主控制电路--------------6 3.2 信号通讯电路-----------7 3.3看门狗电路---------------9 3.4 报警音输出电路------10 3.5 报警灯电路和旋转灯电路-------------------------12 3.6 稳压电源电路---------12 第四章:软件设计--------------13 4.1 软件设计方案---------13 4.2 方案流程图------------14 4.3 主要程序设计---------15 第五章:系统调试与分析------23 5.1 硬件电路调试---------23 5.2 软件调试---------------24 第六章:设计总结--------------25 参考文献--------------------------26 附图:完整电路图---------------27
南通纺织职业技术学院
89C51船舶报警灯柱设计
摘要:文章首先介绍了基于89C51船舶报警灯柱设计的背景及主要内容,设计船舶报警灯柱的目标需求以及方案的确定,随后介绍该设计的硬件和软件的搭建,而硬件电路由89C51的主控制电路,信号通讯电路,报警信号输出电路,稳压电路,报警灯柱电路,旋转灯电路构成;另外软件设计包含了软件设计的方案、方案流程图以及程序的编写。接着对硬件和软件进行调试与分析,从中查找电路的错误,最后是该设计的总结。
关键词:报警灯柱;89C51;
南通纺织职业技术学院
第一章 绪论
1.1课题意义及背景
现代船舶上轮机员的工作岗位一般都是在机舱内,监控、维护船舶主机的运行。机舱内的工作环境十分恶劣,有很强的噪音,在主机等设备的运行过程中由于高温高压下也会产生一些有害气体,这些都对轮机员的人身安全造成了一定的威胁。依据《solas国际海上人命安全公约》及《中国钢制船入海规范条例》相关规定,必须对轮机员的安全进行保护。当船舶进入工作状态,报警灯柱的报警系统进入实时控制,对各项指标进行初始化,主控电路自动将每隔0.5ms对各项指标进行检测,以确保报警的有效,及时发现火灾,CO2,大雾等危情,通过本文所设计的报警控制器输出信号,确保船舶及人员安全。
1.2课题主要内容 本文内容共分六章,第一章为绪论,主要介绍了文章的背景和主要内容。
第二章介绍产品方案设计,主要介绍产品目标需求和产品方案的确定,以便于读者更好的认识安全报警系统的设备组成、主要技术性能等。
第三章介绍系统的硬件电路设计,分别分析了89C51主控制电路,信号通讯电路,报警音输出电路,稳压电路,旋转灯电路,报警灯柱电路的硬件设计方法。
第四章介绍了基于89C51船舶灯柱报警设计及基本编程思想。
第五章介绍了系统的调试分析,主要通过硬件调试和软件调试分别分析了此系统的调试方案。
第六章介绍了本人做此论文的设计总结。
南通纺织职业技术学院
第二章 产品的功能需求及方案的确定
2.1产品功能需求分析
功能一:报警信号比较全面,有报警灯(LED灯板)、旋转灯(发出闪烁流走的光信号)、报警声(用喇叭放大),确保轮机员及时知道故障。
功能二:自动接收故障信号,采用MAX485通讯接受器。例如当外界发生火灾,通过分线箱的连接单片机进行扫描,然后将信号送入声光报警器确认是火警信号后,以MAX485标准信号接受火警信号,转化成TTL电平发送到单片机,经单片机对报警信号解码后,将从单片机P0.5、P2.2口输出火警信号,经喇叭和LED灯输出最终指示对船舶人员予以提示,设定的其他七种报警信号亦是如此。
功能三:声光报警有源触点输出24V,可以直接接报警器的24V声光报警元件。
2.1.1主要技术性能
环境温度:-10~+50℃ 相对湿度:≤RH95%(+40℃时)
碰撞:加速度7g 振动频率:1~35Hz(振幅±0.15~0.35mm)所有设备具有防潮湿、防盐雾、防霉菌的措施 报警输出触点最大容量:AC125V/1A或DC30V/2A 工作电压:DC24V±20% 2.2产品方案的确定
2.2.1产品设计理念
设计在硬件上采用模块化结构,电路方便简洁,易于测试,大大减少了故障的发生率;软件上采用前后台控制,更能反应系统的实时性,也便于软件的结构编写、调试。
南通纺织职业技术学院
外界报警信号报警控制器分线箱声光报警器声光报警器声光报警器声光报警器驾驶室船员居住室机舱
图2.1 系统结构示意图
该模拟电路由报警控制器、分线箱、四个声光报警器、报警复位终端组成。其中报警控制器、分线箱、一个声光报警器安装在驾驶室;两个声光报警器安装在船员居住舱;报警复位终端及一个声光报警器安装在机舱。如系统结构图2.1所示。
报警音电路报警信号信号通讯电路主控电路报警灯电路电源
图2.2 声光报警器控制结构示意图
控制报警器结构分析,当有报警信号时,将信号以MAX485标准转化成TTL电平发送给主控电路,将信号解码后,发送控制指令到报警音和报警灯电路,信号将以光和声音输出,电源分别供给主控电路,报警音、灯电路。
南通纺织职业技术学院
2.2.2方案的确定
系统结构分布在驾驶室、船员居住舱、机舱三个地方。驾驶员在驾驶室启动报警控制器,报警控制器开始工作。当外界发生主机故障、弃船、火灾、二氧化碳、大雾、电话车钟、通用险情时,通过分线箱的连接单片机进行扫描,然后将信号送入声光报警器确认是某一种报警信号,以MAX485标准信号接受报警信号,转化成TTL电平发送到单片机,经单片机对报警信号解码后,将从单片机的P0口或P2.2、P2.5引脚传输到驾驶室、船员居住室、机舱的报警信号终端,当轮机员按下控制器或任一报警终端上的RESET键,系统从设定的安全时间开始重新计时,报警自动撤消。
南通纺织职业技术学院
第三章 硬件电路设计
硬件电路主要由89C51主控制电路,信号通讯电路,报警音输出电路,稳压电路,旋转灯电路,报警灯电路组成。下面将分别对这些电路的设计过程进行阐述。
3.1主控电路
3.1.1 作用
主要作用是接收报警信号,并将信号解码后发送给报警音、灯电路。同时自带复位信号。3.1.2 主控电路
图3.1 主控电路
3.1.3 工作原理
当启动报警控制器后,89C51单片机的P0、P1、P2、P3口都处于高电平状态,其它引脚都处于低电平,即处于不工作状态;当外界有险情时, 89C51单片机开始工作,对分线箱接口的险情信号进行扫描,确定8种险情中的哪一种(即确定报警信号的标志位)后,单片机将接受到的TTL电平从对应的八种报警信号输出引脚之一输出,控制报警灯。单片机引脚的P0.0到P0.6和P2.5引脚是八种报警信号报警灯的输出通道,P2.2引脚是对报警声控制的输出通道,引脚输出状态为“0”时有效,TXD和RXD分别是接受和发送TTL 电平到485通讯端,X1、X2是晶振电路,提供单片机运行的脉冲信号,RESET是单片机防止程序走错
南通纺织职业技术学院
或电源掉电的复位信号,/EA/VP是中断总允许,直接拉高,使其处于“1”状态。3.1.4芯片选型
因设计中设定了八种险情,当外界任意发生某一种险情时,报警控制器通过分线箱传输报警信号,以控制声光报警器,此时单片机就需要8个引脚控制8种险情,并且当单片机扫描外界信号确定是哪一种险情后,它还需一个匹配的信号通讯端将其传输到报警信号终端,还需兼备复位电路,时钟电路,89C51的主要性能特性包括与MCS-51 兼容、4K字节可编程闪烁存储器、使用寿命1000写/擦循环、数据保留时间有10年、全静态工作处于0Hz-24MHz、三级程序存储器锁定、128*8位内部RAM、32可编程I/O线、两个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。
故选89C51单片机,其也能胜任这些功能。
3.2信号通讯电路
3.2.1 作用
主要作用是将报警信号以MAX485标准转化成TTL电平发送给单片机。
3.2.2 信号通讯电路
图3.2 信号通讯电路 3.2.3 工作原理:
MAX485采用单一电源+5V工作,额定电流为300 μA,采用半双工通讯方式。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为
南通纺织职业技术学院
MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。3.2.4 MAX485-基本参数:
速率:2.5Mbps;限摆率:NO;低电流关断模式:NO;接收允许控制:YES;静态电流300 ;负载个数:32;
3.3看门狗电路
3.3.1 作用
主要作用是防止程序“跑飞”,如果程序没有按规定好的路径走,将其放到预处理的指定区间,并提供复位信号到主控电路。3.3.2看门狗电路
图3.4 看门狗电路 3.3.3 工作原理
MAX813L片内看门狗定时器用于MPU/MCU的活动。如果在1.6s内WDI端没有收到来自MPU/MCU 的触发信号,并且WDI处于非高阻态,则WDO输出变低。只要复位信号有效或WDI输入高阻,则看门狗定时器功能就被禁止,且保持清零和不计时状态。复位信号的产生会被禁止定时器,可一旦复位信号撤消并且WDI输入端检测到短至50ns的低电平或高电平跳变,定时器将开始1.6s的计时。即WDI端的跳变会清零定时器并启动一次新的计时周期。
一旦电源电压Vcc降至复位门限以下,WDO端也将变低并保持低电平。只要Vcc升至门限以上,WDO就会立刻变高,不存在延时。3.3.4 MAX813L具有以下四种功能: 1)上电,掉电及电压下降时复位信号输出
2)提供一独立的看门狗,如果在1.6S内没有喟狗的话,将会输出一看门狗信号。3)1.25V门限电压检测器,可实现电源故障告警,电池电压过低检测及5V以外
南通纺织职业技术学院 的电源电压。
4)提供手动复位输入,输出低电位有效复位信号。
3.4报警音输出电路
3.4.1 作用
接受单片机的P2.2引脚输出不同频率的方波脉冲信号通过光耦和两级放大,由扬声器输出特定的报警控制信号。3.4.2 电路图
图3.5 报警音输出电路 3.4.3 电路结构及工作原理
当外界没有发生火灾、CO2、大雾、电话车钟报警、主机故障报警、弃船报警、通用报警时,P2.2引脚成高电平状态,即“1”状态,此时没有电流或电压流向报警音输出电路,三极管以及光耦合不能导通,两级三极管截止,不能形成回路,扬声器不能输出;而当外界发生火灾、CO2、大雾、电话车钟报警、主机故障报警、弃船报警、通用报警时,P2.2引脚成低电平状态,即“0”状态,输出不同频率的脉冲信号,三极管以及光耦合导通,经过三极管联级放大,形成回路,最后通过SP1和SP2连接扬声器带动薄膜不同频率的震动发出特定的频率音频信号,扬声器接+24V的电源。
电路的输入部分首先放置一个5.1K的电阻,后接一个三极管(即OC门)控制输入信号的通断,三极管的基极(B极)和发射极(E极)之间的电压为0.7V时,为导通,若>7V,三极管将被击穿。而5.1K的电阻放置在这是对三极管起一个保护、分压的作用,不至于电压过大击穿三极管,E极接地。C极连接一个光合耦,起到电器隔离的作用,并接有上拉电阻,以保护发光二极管达到3mA,南通纺织职业技术学院
通过光电耦后,有三极管两级放大,可对信号进行放大,再输出。IN4007是一个续流二极管,当三极管截止时,继电器线圈内的磁场产生一个反电动势,易损坏三极管,因此在电路中接一个续流二极管V3以达到保护电路的作用。
3.5 报警灯电路
3.5.1 作用
根据主控器的控制指令来控制报警灯电源电路的断开与闭合,使其报警灯亮与熄灭,以供轮机员和驾驶员能及时发现险情,进行控制。
图3.7报警灯电路
3.5.2 结构分析
本电路首先接入一个1K的电阻,起一个分压的作用,因后接一个三极管,此处的三极管称作为OC门,不至于电流过大,而击穿三极管。后有继电器和二极管,来控制开关的开合,一致使报警灯的闪亮。
报警输出模块电路采用了继电器控制开关。由于在本设计中的输出电路与主控制器电路有一定的距离,而且输出24V信号,为避免对主控制器电路的干扰,因此运用继电器的电气隔离功能实现控制信号的输出。
IN4007是一个续流二极管,当三极管截止时,继电器线圈内的磁场产生一个反电动势,易损坏三极管,因此在电路中接一个续流二极管V9以达到保护电路的作用。3.5.3 工作原理
当控制器输出高电平,电流通过电阻对三极管9013产生基极电流,在DC24V电源及三极管集电极接地的作用下,三极管导通,继电器通电,开关吸合打至4、5档,电路接至VDR(即记录报警状态);同理,当控制器输出低电平,三极管不
南通纺织职业技术学院
能导通,处于截至状态,开关回至2、7档,电路断开。在硬件电路中共有四个输出模块电路,除报警输出模块电路还有机舱输出模块电路、居住舱输出模块电路和驾驶室输出模块电路,其电路结构均与报警输出模块电路一致。
3.6 稳压电源电路
3.6.1作用
主要作用是直流+24V电压经稳压电源电路供给主控电路+5V,小于200mA的电源电压,信号通讯电路+5V电压。
3.6.2 电路图
图3.6 稳压电源电路
3.6.3电路原理分析
如图3.6所示三端稳压芯片采用LM7805,为输出正电压的LM7800系列,该系列集成稳压IC型号中78后面的数字即代表该三端稳压电路的输出电压,在本电路中为正5V。LM7805最大输出电流为1.5A。装上足够大的散热片后,耗散功率可达15W。二极管V2和R10分别起到整流和分压的作用,C6为整流滤波电容,C5为抗干扰电容,用于旁路在输入导线过长时引入的高频干扰脉冲;C4、C3构成多级滤波,具有改善输出瞬态特性和防止电路产生自激振荡的作用。
3.6.4元器件选择
本设计电路采用三端稳压芯片LM78系列三端稳压IC来组成稳压电源,所需的外围元件少,电路内部具有过流、过热及调整管的保护电路,使用起来可靠方便,而且价格便宜。
南通纺织职业技术学院
第四章 软件设计
4.1 软件设计方案
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。
C51 V6版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。因此,C51 V6版本无疑是8051开发用户的最佳选择。
4.1.1程序设计方案 1.主程序流程
如图4.1所示,开机后,对主控芯片进行初始化,例如:堆栈初始化,片内寄存器初始化,参数初始化,另外对端口及外涉元件进行初始化,初始化设置完成后,可以开中断,等待串行口接收数据,数据接收后,确定报警信号是八种报警信号中得哪一种。
2.子程序流程
如图4.2所示,是定时中断程序流程图,定时0.6秒的中断,并初值重装,扫描并确定报警信号,中断返回。
如图4.3所示,是报警灯触点输出流程图,开启中断,扫描报警信号,检测到第一个报警信号,存放于缓冲寄存器,检测到第二个报警信号,也存放于缓冲寄存器,再检测到第三次报警信号,将三次的结果进行比较,看是否相等,若不相等,返回重新扫描,若相等,确定是否与设定好的某一种报警灯触点标志位相同,若不相同,比较下一个,若相同,输出报警灯并中断返回。
如图4.4所示,是报警音标志位流程图,开始并判断预定开始时刻是否等于8,若等于,接收到的数据位0ffH,则没有报警信号,若相等,判断是否与设定好的报警音标志位相等,若相等,输出报警音,若不相等,比较下一个数据,直至8种报警信号比较完,结束。
南通纺织职业技术学院
4.2方案流程图
本电路采用模块化设计,把整个程序分成几个具有明确任务的程序模块,分为编制、调试后再把它们连接在一起,形成一个完成完整的程序。
开始初始化设置参数设置开中断N等待RI接收Y确定报警信号图4.1主程序流程
定时0.6ms中断初值重装重新扫描报警信号中断返回14
4.2定时中断流程
图南通纺织职业技术学院
定时中断 扫描接受第一次信号接受第二次信号接受第三次信号判断信号是否相等YReceive_data&0x04YN无报警信号NReceive_data&0x02YNReceive_data&0x01NReceive_data&0x08NReceive_data&0x10YNYY输出主机故障报警输出order报警输出电话故障报警输出弃船报警输出CO2报警Receive_data&0x20YNReceive_data&0x40YNReceive_data&0x80Y输出火警输出通用报警输出大雾报警中断返回 图4.3报警灯触点输出
南通纺织职业技术学院
开始判断zero=?8YReceive_data==0xff无报警音输出N(receive_data&0x10)zero=?2YN(receive_data&0x40)zero=?0N(receive_data&0x08)zero=?4YN(receive_data&0x20)zero=?1NYY输出CO2报警音输出通用报警音输出弃船报警音输出火警音结束(receive_data&0x80)zero=?3N(receive_data&0x04)zero=?4N(receive_data&0x02)zero=?5N(receive_data&0x01)zero=?6YYYY输出大雾报警音输出主机故障报警音输出order报警音输出电话报警音结束
图4.4报警音输出
4.3 主要程序设计
初始化程序 #include
南通纺织职业技术学院
sbit yellow=P2^1;sbit green=P2^4;sbit wdr=P1^7;sbit receive=P2^3;sbit speak=P2^2;unsigned char receive_date;unsigned int times=800;unsigned int general_times=800;unsigned int ship_times=800;unsigned int phone_times=800;unsigned int mainframe_times=800;unsigned int fire_times=0;unsigned char general_flag=0;unsigned char flag=0;unsigned char ship_flag=0;unsigned char phone_flag=0;unsigned char mainframe_flag=0;unsigned char fire_flag=0;unsigned char mist_flag=0;unsigned char fire_TH0=0xfa;unsigned char fire_TL0=0x42;unsigned char light=0;unsigned char zero=8;unsigned char receive_date_1=0;unsigned char receive_date_2=0;unsigned char receive_date_3=0;unsigned char receive_times=0;void general_alarm(void);void ship_alarm(void);void co2_alarm(void);void phone_alarm(void);void mainframe_alarm(void);void fire_alarm(void);void mist_alarm(void);void date(void);void led(void);函数名:main
功能: 报警灯触点输出 main(){ TMOD=0x21;TH1=0xE6;TL1=0xE6;TR1=1;
TH0=0x02;
南通纺织职业技术学院
TL0=0x71;
ET0=1;
TR0=1;
EA=1;P0=0x00;yellow=0;green=0;red=0;speak=0;wdr=0;receive=0;SCON=0x50;PCON=0x00;do { while(RI==0);
RI=0;
// receive_date=SBUF;
receive_times++;
if(receive_times==1){receive_date_1=SBUF;} //if(receive_times==2){receive_date_2=SBUF;}//receive_times++;}
if(receive_times==2)
{receive_date_2=SBUF;
receive_times=0;if(receive_date_2==receive_date_1)receive_date=receive_date_2;}
led();
if(light<1)
{if((receive_date&0x04)==0x00)mainframe=1;
if((receive_date&0x02)==0x00)order=1;
if((receive_date&0x01)==0x00)phone=1;
if((receive_date&0x08)==0x00)ship=1;
if((receive_date&0x10)==0x00)co2=1;
if((receive_date&0x20)==0x00)fire=1;
if((receive_date&0x40)==0x00)general=1;
if((receive_date&0x80)==0x00)mist=1;
light++;}
else
{ light++;mainframe=0;order=0;phone=0;general=0;co2=0;fire=0;ship=0;mist=0;if(light>2)light=0;} } while(1);} 函数名:void led(void)功能: 旋转灯
触点输出 void led(void)
南通纺织职业技术学院
{ if((receive_date&0x40)<0x40)green=1;
else green=0;if((receive_date&0x38)<0x38)red=1;
else red=0;if((receive_date&0x07)<0x07)yellow=1;
else yellow=0;if((receive_date&0x80)<0x80)yellow=1;
else red=0;} 函数名:void date(void)功能:报警音标志
void date(void){ unsigned char i=0;zero=8;if(receive_date==0xff){mainframe=0;order=0;phone=0;general=0;co2=0;fire=0;ship=0;yellow=0;red=0;speak=1;}
else
{ if((receive_date&0x10)==0x00)zero=2;
else
{ if((receive_date&0x40)==0x00)zero=0;
else
{ if((receive_date&0x08)==0x00)zero=4;
else
{ if((receive_date&0x20)==0x00)zero=1;
else
{ if((receive_date&0x80)==0x00)zero=3;
else
{ if((receive_date&0x04)==0x00)zero=4;
else
{ if((receive_date&0x02)==0x00)zero=5;
else { if((receive_date&0x01)==0x00)zero=6;
} } } } } } } }} 功能:定时中断服务程序
void timer0(void)interrupt 1 {wdr=~wdr;
TH0=0xfe;
TL0=0x0c;
date();
general_alarm();
fire_alarm();
co2_alarm();
ship_alarm();
mainframe_alarm();
phone_alarm();}
南通纺织职业技术学院
功能:通用报警音
void general_alarm(void){ if(zero==0)
{ if(flag<14)
{if(general_flag==0)speak=~speak;
else speak=0;
if(times==0){flag++;times=800;general_flag=~general_flag;}
else times--;}
else
{ if(flag==14)
{times=11200;
flag=15;}
if(flag==15)
{times--;
speak=~speak;
if(times==0){flag=16;times=3200;}}
if(flag==16)
{speak=0;
times--;
if(times==0){flag=0;times=800;general_flag=0;} } } } else {flag=0;times=800;general_flag=0;}} 功能:弃船报警音
//shuiwu void ship_alarm(void){ if(zero==3)
{TH0=0xfc;
TL0=0x0e;if(ship_flag==0)
{ ship_times--;
speak=~speak;
if(ship_times==0){ship_flag=1;ship_times=1000;}}
if(ship_flag==1)
{ ship_times--;
speak=0;
if(ship_times==0){ship_flag=2;ship_times=500;}} if(ship_flag==2)
{ ship_times--;
speak=~speak;
if(ship_times==0){ship_flag=3;ship_times=800;} }
if(ship_flag==3)
{ship_times--;
speak=0;
if(ship_times==0){ship_flag=0;ship_times=500;}} }
else {ship_flag=0;ship_times=800;}} 功能:co2报警音 void co2_alarm(void){if(zero==2)
南通纺织职业技术学院
{ TH0=0xfe;
TL0=0x0b;
speak=~speak;}} 功能:电话车钟报警音
void phone_alarm(void){ if((zero==6)||(zero==5))
{TH0=0xfc;
TL0=0xbd;
if(phone_flag==0)
{phone_times--;
speak=~speak;
if(phone_times==0){phone_flag=1;phone_times=800;} }
if(phone_flag==1)
{ phone_times--;
speak=0;
if(phone_times==0){phone_flag=0;phone_times=800;} } } else {phone_flag=0;phone_times=800;}} 功能: 主机故障报警音
void mainframe_alarm(void){ if(zero==4)
{if(mainframe_flag==0)
{TH0=0xfe;
TL0=0x0b;
mainframe_times--;
speak=~speak;if(mainframe_times==0){mainframe_flag=1;mainframe_times=800;} }
else
{TH0=0xfd;
TL0=0xd3;
mainframe_times--;
speak=~speak;if(mainframe_times==0){mainframe_flag=0;mainframe_times=800;} } }
else {mainframe_flag=0;mainframe_times=800;}} 功能:火警报警音 void fire_alarm(void){if(zero==1)
{ if(fire_flag==0)
{TH0=fire_TH0;
TL0=fire_TL0;
fire_times++;
speak=~speak;
if(fire_times==3)
{fire_times=0;
fire_TL0++;
if(fire_TL0==0xff){fire_TL0=0x00;fire_TH0++;}} if((fire_TL0==0xad)&&(fire_TH0==0xfd)){fire_flag=1;fire_times=0}} {TH0=fire_TH0;
else
南通纺织职业技术学院
TL0=fire_TL0;
fire_times++;
speak=~speak;
if(fire_times==2)
{fire_times=0;
fire_TL0--;
if(fire_TL0==0x00){fire_TL0=0xff;fire_TH0--;}} if((fire_TL0==0x42)&&(fire_TH0==0xfa)){fire_flag=0;fire_times=0;} } }
else {fire_flag=0;fire_times=0;fire_TL0=0x42;fire_TH0=0xfa;}}
南通纺织职业技术学院
第五章 系统调试分析
5.1硬件调试
5.1.1硬件调试的目的
发现设计的缺陷和安装的错误,并改进与修正,提出改进建议;通过调整电路参数,避免因元器件参数或装配工艺不一致,而造成电路性能的不一致或功能和技术指标达不到设计要求的情况发生,确保产品的各项功能和性能指标均达到设计要求。
5.1.2硬件调试的过程
1、通电前的检查
在电路板通电之前,大概观察下电路板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象,再用万用表检查一下电源跟地线之间的电阻值是否够大,以确保通电安全。重点检查如下:
电容的检查:将万用表调至欧姆档,然后用两个表笔分别接电容的两个引脚,如果电容无误,此时万用表的数字会慢慢变大,最后变成无穷大,然后调用万用表的表笔,情况和前面一样。
二极管、三极管、稳压管的检查(如报警信号输出电路中的二极管、三极管,):因为在实际电路中,三极管的偏置电阻或二极管、稳压管的周边电阻一般都比较大,大都在几百几千欧以上,这样在测量时可以用万用表的R*10Ω或R*1Ω档来测量PN结的好坏,在测量时,用R*10Ω档测PN结有较明显的正反特性,表针指示在200Ω左右。
2、通电调试
首先确认各芯片电源引脚的电压是否正常,其次检查各种参考电压是否正常,另外还有各点的工作电压是否正常等。如检查电路中各三极管BE结电压是否在0.7V左右,CE结电压是否在0.3V左右或者更小,如果BE结电压大于0.7V,则可能是BE结开路。
在通电过程中,将信号源加入输入端,然后依次往后测量各点的波形,看是否正常。在系统工作时,检查报警信号指示灯LED灯板的好坏。如果在电路通电过程中发现电路冒烟,有异常气味或有元器件发烫现象,应立即切断电源,检查电路中的二极管、三极管以及集成块等元器件是否接错,排除故障后,方可重新
南通纺织职业技术学院
接通电源进行测试。
5.2软件调试
5.2.1软件调试的目的
软件调试的任务是通过对系统应用的汇编、连接、执行来发现程序中的语法及逻辑错误,并加以纠正。由于大多数程序的运行依赖于硬件,因此,应用程序必须在联机状态下进行仿真调试。
5.2.2软件调试的过程
本软件设计采用模块化结构设计,因此在软件调试时,分别对定时设定值、软件看门狗及报警输出功能模块独立仿真调试。
在联机调试过程中,运用单步运行对程序一步一步地运行,观察程序中每条指令执行的情况,从而确定是硬件错误、数据错误还是程序设计错误。单步调试完成后,还要做连续运行调试,以防止某些错误在单步运行时被覆盖。
经过软、硬件调试后,可确定硬件电路和软件系统基本正确。这时,可将程序固化到EEPROM中,用单片机芯片替换仿真器后,进行系统脱机运行及现场调试。若系统现场运行正常,则调试结束,即可进行产品的安装运行。
南通纺织职业技术学院
第六章 设计总结
在即将预就业之际,我的论文落下了帷幕,期间有同学和老师的帮助,我的论文内容不懂的地方,才能够很顺利的解决。之前进行论文课题的选择,看到各个老师的题目,感觉真正的把我们所学的都能容纳进去。经过一天时间的考虑,我选择了邱宏老师的基于89C51船舶报警灯柱调试与分析,因为我对这方面还比较感兴趣,同时邱老师懂的知识面比较广,知识点讲得细。
在2011年10月,开始了我的论文,当然邱老师给我详细讲了怎么去写论文,把握好格式、前后照应、在结构等有关内容,先是介绍该产品的设计对社会的作用,在那些方面起到很好的效果,背景及意义;后有设计方案,软硬件设计模块,再对设计好的产品进行调试与分析,总结。总体的结构的模块化要明显易懂,具体考虑到让阅读人能明白产品的设计构建、功能。
针对弄好毕业论文里面所存在的各种类型问题,做到了不懂就查、问,把 所有问题都明晰化,易懂化,当然我在此期间也学到了不少东西,硬件电路的搭建,元器件的选择,电路的分析,程序的编写,更好的学会了论文书写的流程,总体来说还是要由思想,层次分明,有计划的行事。
以前我在写东西这方面头脑比较混乱,没有思路,而且当没有思路的时候,耐不住性子,烦躁,现在我知道了该怎么做,该怎么去写,该怎么设计,当然也很感谢同学的帮助和邱老师的衷心教导及建议。认真踏实、坚持不懈、处理事情明晰化、条理化,不懂就问,乐于好学,总结收获是我在本次论文设计当中的最大收益。邱老师的知识面广,谦虚,乐于给我们提很多的建议,帮助我们,教导我们,把我们的事当成自己的事,很有责任心得传授于我。在这里我要向指导老师诚挚的谢意和敬意。
在以后的工作和生活当中,通过这次的毕业设计相信自己能取其长,补其短,改其错,学以致用,搞好工作,向更高更好层次发展。
南通纺织职业技术学院
参考文献
1、《模拟电子技术基础》作者:陈梓城 高等教育出版社 2003年12月
2、《数字电子技术》作者:杨志忠 高等教育出版社 2003年12月
3、《微机控制技术》作者:杨宁 高等教育出版社 2005年11月
4、《单片机原理及应用技术》作者:李全利 高等教育出版社 2004年11月
5、《智能仪器技术及其应用》作者:方彦军 化学工业出版社 2007年9月
6、《智能仪表原理与设计》作者:李昌禧 化学工业出版社 20057、《微机原理及接口技术》作者:张开成 北京大学出版社 20098、《微机计算机控制技术》作者:潘新民,王艳 高等教育出版社 2001
年2月 年4月 年1月
南通纺织职业技术学院
完整附图:
南通纺织职业技术学院
第二篇:单片机c语言设计试题答案
单片机C语言程序设计师试题
一、填空题
1、设X=5AH,Y=36H,则X与Y“或”运算为_________,X与Y的“异或”运算为________。
2、若机器的字长为8位,X=17,Y=35,则X+Y=_______,X-Y=_______(要求结果写出二进制形式)。
3、单片机的复位操作是__________(高电平/低电平),单片机复位后,堆栈指针SP的值是________。
4、单片机中,常用作地址锁存器的芯片是______________,常用作地址译码器芯片是_________________。
5、若选择内部程序存储器,应该设置为____________(高电平/低电平),那么,PSEN信号的处理方式为__________________。
6、单片机程序的入口地址是______________,外部中断1的入口地址是_______________。
7、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为_________,机器周期为_______________。
8、外围扩展芯片的选择方法有两种,它们分别是__________________和_______________。
9、单片机的内部RAM区中,可以位寻址的地址范围是__________________,特殊功能寄存器中,可位寻址的地址是____________________。
10、子程序返回指令是________,中断子程序返回指令是_______。11、8051单片机的存储器的最大特点是____________________与____________________分开编址。12、8051最多可以有_______个并行输入输出口,最少也可以有_______个并行口。
13、_______是C语言的基本单位。
14、串行口方式2接收到的第9位数据送_______寄存器的_______位中保存。
15、MCS-51内部提供_______个可编程的_______位定时/计数器,定时器有_______种工作方式。
16、一个函数由两部分组成,即______________和______________。
17、串行口方式3发送的第9位数据要事先写入___________寄存器的___________位。
18、利用8155H可以扩展___________个并行口,___________个RAM单元。
19、C语言中输入和输出操作是由库函数___________和___________等函数来完成。
二、选择题
1、C语言中最简单的数据类型包括()。
A、整型、实型、逻辑型 B、整型、实型、字符型
C、整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型
2、当MCS-51单片机接有外部存储器,P2口可作为()。A、数据输入口 B、数据的输出口 C、准双向输入/输出口 D、输出高8位地址
3、下列描述中正确的是()。A、程序就是软件 B、软件开发不受计算机系统的限制
C、软件既是逻辑实体,又是物理实体 D、软件是程序、数据与相关文档的集合
4、下列计算机语言中,CPU能直接识别的是()。
A、自然语言 B、高级语言 C、汇编语言 D、机器语言
5、MCS-5l单片机的堆栈区是设置在()中。
A、片内ROM区 B、片外ROM区 C、片内RAM区 D、片外RAM区
6、以下叙述中正确的是()。
A、用C语言实现的算法必须要有输入和输出操作 B、用C语言实现的算法可以没有输出但必须要有输入 C、用C程序实现的算法可以没有输入但必须要有输出 D、用C程序实现的算法可以既没有输入也没有输出
7、定时器/计数器工作方式1是()。
A、8位计数器结构 B、2个8位计数器结构 C、13位计数结构 D、16位计数结构
8、C语言提供的合法的数据类型关键字是()。
A、Double B、short C、integer D、Char
9、片内RAM的20H~2FH为位寻址区,所包含的位地址是()。
A、00H~20H B、00H~7FH C、20H~2FH D、00H~FFH
10、以下能正确定义一维数组的选项是()。
A、int a[5]={0,1,2,3,4,5};B、char a[ ]={0,1,2,3,4,5};C、char a={'A','B','C'};D、int a[5]=“0123”;
11、数据的存储结构是指()。
A、存储在外存中的数据 B、数据所占的存储空间量
C、数据在计算机中的顺序存储方式 D、数据的逻辑结构在计算机中的表示
12、下列关于栈的描述中错误的是()。
A、栈是先进后出的先性表 B、栈只能顺序存储
C、栈具有记忆作用 D、对栈的插入和删除操作中,不需要改变栈底指针
13、在寄存器间接寻址方式中,间址寄存器中存放的数据是()。A、参与操作的数据 B、操作数的地址值 C、程序的转换地址 D、指令的操作码
14、MCS-51单片机的复位信号是()有效。A、高电平B、低电平C、脉冲 D、下降沿
15、为了使模块尽可能独立,要求()。A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强
16、若MCS-51单片机使用晶振频率为6MHz时,其复位持续时间应该超过()。A、2μs B、4μs C、8μs D、1ms
17、以下选项中可作为C语言合法常量的是()A、-80 B、-080 C、-8e1.0 D、-80.0e
18、能够用紫外光擦除ROM中程序的只读存储器称为()。
A、掩膜ROM B、PROM C、EPROM D、EEPROM
19、以下不能定义为用户标识符是()。
A、Main B、_0 C、_int D、sizeof 20、下选项中,不能作为合法常量的是()。//幂不能为小数
A、1.234e04 B、1.234e0.4 C、1.234e+4 D、1.234e0
21、以下叙述中错误的是()A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B、数组名代表的是数组所占存储区的首地址,其值不可改变
C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D、可以通过赋初值的方式确定数组元素的个数
22、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是()
A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)
23、存储16×16点阵的一个汉字信息,需要的字节数为()
A、32 B、64 C、128 D、256
24、已知1只共阴极LED显示器,其中a笔段为字形代码的最低位,若需显示数字1,则它的字形代码应为()。
A、06H B、F9H C、30H D、CFH
25、在C语言中,合法的长整型常数是()A、OL B、4962710 C、324562& D、216D
26、以下选项中合法的字符常量是()A、“B” B、’ 10’ C、68 D、D
27、若PSW.4=0,PSW.3=1,要想把寄存器R0的内容入栈,应使用()指令。A、PUSH R0 B、PUSH @R0 C、PUSH 00H D、PUSH 08H
28、在片外扩展一片2764程序存储器芯片要()地址线。A、8根 B、13根 C、16根 D、20根
29、设MCS-51单片机晶振频率为12MHz,定时器作计数器使用时,其最高的输入计数频率应为()A、2MHz B、1MHz C、500kHz D、250kHz 30、下列数据字定义的数表中,()是错误的。
A、DW “AA” B、DW “A” C、DW “OABC” D、DW OABCH
三、判断题()1、在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。()2、在C语言的复合语句中,只能包含可执行语句。()3、自动变量属于局部变量。()
4、Continue 和break都可用来实现循环体的中止。()
5、字符常量的长度肯定为1。()
6、在MCS-51系统中,一个机器周期等于1.5μs。()
7、C语言允许在复合语句内定义自动变量。
()
8、若一个函数的返回类型为void,则表示其没有返回值。()
9、所有定义在主函数之前的函数无需进行声明。
()
10、定时器与计数器的工作原理均是对输入脉冲进行计数。()
11、END表示指令执行到此结束。
()
12、ADC0809是8位逐次逼近式模/数转换接口。()
13、MCS-51的相对转移指令最大负跳距是127B。()
14、MCS-51的程序存储器只是用来存放程序的。
()
15、TMOD中的GATE=1时,表示由两个信号控制定时器的的启停。()
16、MCS-51的特殊功能寄存器分布在60H~80H地址范围内。()
17、MCS-51系统可以没有复位电路。()
18、片内RAM与外部设备统一编址时,需要专门的输入/输出指令。
()
19、锁存器、三态缓冲寄存器等简单芯片中没有命令寄存和状态寄存等功能。()20、使用8751且 =1时,仍可外扩64KB的程序存储器。
四、简答题
1、在使用8051的定时器/计数器前,应对它进行初始化,其步骤是什么?
2、什么是重入函数?重入函数一般什么情况下使用,使用时有哪些需要注意的地方? 3、8051引脚有多少I/O线?他们和单片机对外的地址总线和数据总线有什么关系?地址总线和数据总线各是几位?
4、在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率?
5、如何消除键盘的抖动?怎样设置键盘中的复合键? 答案
一、填空题 1、7EH、6CH 2、110100、11101110
3、高电平、07h 4、74HC373、74HC138
5、高、不用 6、0000H、0013H 7、0.5us、2us
8、线选法、译码法 9、20H~2FH、是能被8整除的地址
10、Ret、RETI
11、内部RAM、外部RAM 12、32、8
13、函数
14、SCON、RB8 15、3、16、4
16、说明部分、语句部分
17、SCON、TB8 18、3、256
19、scanf、printf
二、选择题
1、B
2、C
3、D
4、D
5、C
6、C
7、D
8、B
9、B
10、B
11、D
12、C
13、B
14、A
15、B
16、B
17、A
18、C
19、D 20、B
21、C
22、D
23、A
24、B
25、A
26、B
27、D
28、B
29、C 30、A
三、判断题
1、√
2、×
3、√
4、×
5、√
6、×
7、√
8、√
9、×
10、×
11、×
12、√
13、√
14、×
15、√
16、×
17、×
18、×
19、√ 20、√
四、简答题
1、答:(1)确定T/C的工作方式——编程TMOD寄存器;(2)计算T/C中的计数初值,并装载到TH和TL;
(3)T/C在中断方式工作时,须开CPU中断和源中断——编程IE寄存器;(4)启动定时器/计数器——编程TCON中TR1或TR0位。
2、答: 多个函数可以同时使用的函数,称为重入函数。
通常情况下,C51函数不能被递归调用,也不能应用导致递归调用的结构。有此限制是由于函数参数和局部变量是存储在固定的地址单元中。重入函数特性允许你声明一个重入函数。即可以被递归调用的函数。重入函数可以被递归调用,也可以同时被两个或更多的进程调用。重入函数在实时应用中及中断服务程序代码和非中断程序代码必须共用一个函数的场合中经常用到。
3、答:1)8051引脚共有40个引脚,8051的地址总线由P2和P0口提供,P2口是地址总线的高8位,P0口是地址总线的低8位;数据总线由P0口提供;P0口的地址总线和数据总线是分时进行的,P0口的地址总线需要外接地址锁存器完成地址锁存。2)地址总线共16位,数据总线是8位。
4、答:在有串行通信时,定时器/计数器1的作用是串行口发生器。串行口的波特率根据串行口的工作方式具有不同的计算方式: 方式0的波特率固定为晶体振荡器的十二分之一; 方式1的波特率=2SMOD.(定时器1的溢出率)/32; 方式2波特率=2SMOD.(fosc/64); 方式3波特率同方式1(定时器l作波特率发生器)。
5、答:由于按键是机械开关结构,所以当用手按下其中一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。若抖动问题不解决,就会引起对闭合键的多次读入。对于键抖动最方便的解决方法就是当发现有键按下后,不是立即进行扫描,而是延时大约10ms后再进行。由于一个键按下的时间一般会持续上百毫秒,所以延迟10ms后再扫描处理并不迟。复合键可以仿照计算机复合键的处理方法,通常可以假设一个键具有复合功能,再与其它减的键值组合成复合键。
第三篇:51单片机毕业论文
mcu001 80386保护模式【论文+91页+4.2万+doc】
mcu002 ARM硬件电路板设计之外围接口电路研究【毕业论文+21页+1.2万+doc】
mcu003 CDMA通信系统中的接入信道部分进行仿真与分析【doc格式+45页+毕业论文1.6万】 mcu004 CDMA通信系统中的接入信道部分进行仿真与分析【论文+45页+1.7万+doc】
mcu005 CDMA系统的研究与MATLAB仿真【论文+41页+1.8万+doc】
mcu006 DS18B20温度采集【doc+毕业论文+45页1.9万】
mcu007 FIRA 5v5机器人足球赛进攻策略研究【毕业论文+45页+1.8万+doc】
mcu008 FIR数字滤波器设计与实现【论文+28页+0.7万+doc】
mcu009 FPGA实现差错控制编码技术【论文+31页+1.3万+doc】
mcu010 FPGA在数字滤波器设计中的应用【论文+9页+0.7万+doc】
mcu011 GPRS远程登陆数据终端设计【论文+55页+1.5万+doc】
mcu012 GPRS远程控制系统设计——信息收集与处理子系统【论文+16页+0.3万+doc】
mcu013 GPRS远程控制系统设——远程控制设计【论文+73页2.6万+doc】
mcu014 GPS汽车定位系统设计【论文+30页+1.35万+doc】
mcu015 GSM无线网络优化【论文+53页+2.6万+doc】
mcu016 I2C总线接口的数据采集系统【毕业论文+27页+0.85万+doc】
mcu017 IIR带通滤波器的VHDL描述及仿真【论文+doc+47页+2.1万字】
mcu018 LED显示屏动态显示和远程监控的实现【论文+11页+0.8万+doc】
mcu019 MCS-51单片机温度控制系统【论文+6页+0.2万+doc】
mcu020 MSN机器人程序的设计与实现【论文+0.8万+36页+doc】
mcu021 PLC在自动售货机中的运用【论文+26页+0.5万+doc】
mcu022 PT100温度巡检【毕业论文+22页+1万+doc】
mcu023 QPSK、QAM的调制通信仿真【毕业论文+43页+2万+doc】
mcu024 SPCE061A的教育机器人硬件平台设计【毕业论文+184页+1.37万+doc】
mcu025 USB接口的多路温湿度采集系统设备端设计【毕业论文+25页+0.9万+doc】
mcu026 USB摄像头驱动开发与研究【论文+28页+1.6万+doc】
mcu027 USB数据采集系统设计【论文+1.4万+46页+doc】
mcu028 Y2O3添加量对低居里点PTC热敏电阻器性能的影响【论文28页+1.7万+doc】
mcu029 π4-DQPSK信号的FPGA实现【论文+54页+2.5万+doc】
mcu030 板厚为6mm的0Cr18Ni9钢板采用焊条电弧焊 的焊接工艺评定(拉伸)关于焊接的毕业论文【论文+1.3万+24页+doc】
mcu031 步进电机控制器设计与实现【毕业论文+30页+0.9万+doc】
mcu032 板卡式语音平台开发【论文+55页+2.3万+doc】
mcu033 采矿工程本科毕业论文【论文+6.3万+140页+doc】
mcu034 采用适用的跟踪来区分和监控站点活动【毕业论文+13页+0.8万+doc】
mcu035 仓库温湿度的监测系统【毕业论文+31页+1.4万+doc】
mcu036 常用电子元器件SQL查询系统设计【论文+33页+1.2万+doc】
mcu037 超声波明渠流量计【论文+84页+3.4万+doc】
mcu038 超声波明渠流量计的研究【论文+71页+2.1万+doc】
mcu039 车库电脑收费管理系统【论文+60页+2.3万+doc】
mcu040 传感器控制温度【毕业论文+33页+1.4万+doc】【论文+91页+4万+doc】
mcu041 串口通信与控制系统【毕业论文+38页+1.5万+doc】
mcu042 磁性物含量计设计【论文+95页+4.2万+doc】
mcu043 单片机串行通信发射机【doc格式+31页+毕业论文】
mcu044 单片机串行通信发射机【毕业论文+37页+1.7万+doc】
mcu045 单片机电子称的设计制作【论文+52页+0.9万+doc】
mcu046 单片机电子密码锁报告【毕业论文+27页+0.4万+doc】
mcu047 单片机控制的电机交流调速系统设计【论文+1.6万+47页+doc】
mcu048 单片机控制的秒表系统【毕业论文+35页+1万+doc】
mcu049 单片机控制交通灯【论文+19页+0.8万+doc】
mcu050 单片机快速心率计【论文+41页+1.2万+doc】
mcu051 单片机日历时钟系统开发【论文+30页+1.0万+doc】
mcu052 单片机水箱控制系统【论文+55页+1.5万+doc】
mcu053 单片机智能温室系统的设计【毕业论文+64页+1.9万+doc】
mcu054 单片机智能遥控【论文+46页+1.2万+doc】
mcu055 单片机自动配料电子称【论文+52页+0.9万+doc】
mcu056 单元机组控制系统【论文+47页+2.5万+doc】
mcu057 蛋白质水解温度控制系统【论文+30页+1.5万+doc】
mcu058 道路超载车辆随机动态检测系统硬件设计【论文+55页+1.5万+doc】
mcu059 低频功率放大器设计【论文+22页+0.5万+doc】
mcu060 电厂可视化管理系统之三维图形子系统的开发与研究【毕业论文+66页+1.5万+doc】
mcu061 电磁高频激振筛控制电路的研究【论文+52页+1.9万+doc】
mcu062 电动智能小车【毕业论文+doc格式+44页1.7万】
mcu063 电感式磁性物含量计的研制【论文+96页+4.1万+doc】
mcu064 电热毯微电脑温度测控仪【论文+55页+1.5万+doc】
mcu065 电梯控制系统的设计【毕业论文+doc+31页+1.2万】
mcu066 电信业务计费帐务系统【毕业论文+65页+2.3万+doc】
mcu067 电信运营商收入保障系统设计与实现【硕士论文+doc格式+65页3.1万】
mcu068 电子测时仪数据传输【毕业论文+doc+40页+1.8万】
mcu069 电子万年历设计报告【论文+55页+1.5万+doc】
mcu070 多点报警系统制作与设计【论文+52页+1.4万+doc】
mcu071 多点报警系统总体电路设计【论文+54页+1.6万+doc】
mcu072 多点温度测量系统【论文+70页+3.5万+doc】
mcu073 多功能防盗报警艺术灯具【论文+49页+1.7万+doc】
mcu074 多功能液晶广告牌的设计【毕业论文+93页+2万+doc】
mcu075 多功能语音控制小车的设计【论文+76页+2.1万+doc】
mcu076 多路数据采集系统【毕业论文+48页+1万+doc】
mcu077 多媒体课件制作的审美学研究【毕业论文+26页+doc+2.1万字】
mcu078 多媒体课件制作的研究【论文+doc+28页+1.9万字】
mcu079 多通道电话报警系统的设计【论文+20页+1.3万+doc】
mcu080 多型腔塑料注射模具设计【论文+43页+1.8万+doc】
mcu081 二级倒立摆的建模与仿真说明报告【论文+29页+0.3万+doc】
mcu082 二十一音电子琴的设计(AT89C51单片机)【论文+doc+52页2.1万】
mcu083 非接触式红外测温系统【论文+59页+1.9万+doc】
mcu084 感应式ID考勤机【论文+80页+2.1万+doc】
mcu085 感应式ID消费系统【论文+11页+0.2万+doc】
mcu086 高压注浆机PLC系统的设计【论文40页+1.7万+doc】
mcu087 辊道窑框架优化设计正文【论文+35页+1.2万+doc】
mcu088 辊道窑窑头储坯机PLC控制系统【论文+34页+1.4万+doc】
mcu089 锅炉汽包水位控制系统的设计【论文+27页+1.7万+doc】
mcu090 红外通信在LED广告牌中的应用【论文+28页+1.1万+doc】
mcu091 换热器的计算机辅助设计【论文+38页+1.1万+doc】
mcu092 火灾自动报警系统设计【doc格式+27页+毕业论文】
mcu093 火灾自动报警系统设计【论文+27页+1.1万+doc】
mcu094 机械手顺序控制器【论文+19页+0.5万+doc】
mcu095 基于51单片机的嵌入式RTOS操作系统技术的研究【论文+22页+1.6万+doc】
mcu096 基于51单片机的无线抄表监控设计【论文+55页+1.6万+doc】
mcu097 基于80C51单片机电动智能小车【毕业论文+44页+1.8万+doc】
mcu098 基于80C51单片机智能小车【论文+44页+1.7万+doc】
mcu099 基于ACL的网络病毒过滤规则【论文+36页+2.2万+doc】
mcu100 基于ARM9的嵌入式Linux开发平台研究——嵌入式系统QT图形界面的构建【论文+28页+1.3万+doc】
mcu101 基于ARM920T嵌入式Linux系统平台的构建【毕业论文+doc+57页2.7万】
mcu102 基于ARM的多功能信号源设【论文+26页+0.7万+doc】
mcu103 基于AT89C51单片机超声波测距仪的设计【论文+34页+1.2万+doc】
mcu104 基于AT89C51单片机超声波倒车雷达的设计【论文+25页1.2万+doc】
mcu105 基于AT89C51单片机多点温度测量系统【论文+70页+3.5万+doc】
mcu106 基于AT89C51单片机多机通讯在家居系统中的应用【论文+48页+0.8万+doc】
mcu107 基于AT89C51单片机公车自动报站系统的设计【论文+48页+1.8万+doc】
mcu108 基于AT89C51单片机红外抄表系统【论文+46页+1.9万+doc】
mcu109 基于AT89S52单片机多功能智能小车设计【论文+4页+0.1万+doc】
mcu110 基于CAXA制造软件完成零件的三维造型【论文+18页+0.8万+doc】
mcu111 基于CPLD的数字频率计的设计【毕业论文+33页+1.5万+doc】
mcu112 基于DDS多功能信号源的设计【论文36页+1.7万+doc】
mcu113 基于DSP语音采集回放系统的实现【论文+47页+1.8万+doc】
mcu114 基于FPGA的LCD控制器设计【论文+64页+2.3万+doc】
mcu115 基于FPGA实现可扩展高速FFT处理器的研究【论文+61页+2.4万+doc】
mcu116 基于GPS公交陈报站监控系统开发【毕业论文+46页+1.7万+doc】
mcu117 基于GSM短消息的远程数据采集传输系统【论文+54页+1.7万+doc】
mcu118 基于GSM短信模块的家庭防盗报警系统【doc格式+25页+毕业论文】
mcu119 基于GSM短信模块的家庭防盗报警系统【毕业论文+25页+0.7万+doc】
mcu120 基于HS3的虚拟示波器【论文+37页+1.4万+doc】
mcu121 基于IC卡的数据据采集系统【论文+67页+1.6万+doc】
mcu122 基于IC卡的数据据采集系统--现场数据采集系统【论文+81页+2.2万+doc】
mcu123 基于Linux的嵌入式操作系统研究【毕业论文+44页+3.8万+doc】
mcu124 基于MSTP多业务节点平台设计与实现【论文+1.6万+32页+doc】
mcu125 基于nRF24E1无线耳机的设计【论文+67页+2.1万+doc】
mcu126 基于PC机的智能抢答器【毕业论文+doc+31页+7.4千字】
mcu127 基于PIC16F877A单片机温度监控系统的设计【论文+5页+0.3万+doc】
mcu128 基于PLC的化肥袋装控制系统【论文+38页+1.3万+doc】
mcu129 基于PLC技术工厂污水处理系统【论文+22页+1.2万+doc】
mcu130 基于ProE鼠标上盖制品及模具的三维造型【论文+12页+0.5万+doc】
mcu131 基于uClinux的GPS车载导航系统设计与实现【论文+11页+0.7万+doc】
mcu132 基于USB总线的高速数据采集系统设计【论文+52页+2.9万+doc】
mcu133 基于Windows CE的智能家居安防系统【论文+30页+1.1万+doc】
mcu134 基于Winsock操作系统上的网络编程接口研究【论文+45页+2.9万+doc】
mcu135 基于窗函数实现FIR滤波器【毕业论文+14页+0.5万+doc】
mcu136 基于单片机的FTU测控保护一体化装置设计【毕业论文+51页+1.7万+doc】
mcu137 基于单片机的创新出租车计价器【论文+43页+1.0万+doc】
mcu138 基于单片机的电子闹钟设计【毕业论文+50页+2.4万+doc】
mcu139 基于单片机的红外遥控电子密码锁【论文+55页+1.5万+doc】
mcu140 基于单片机的录放音系统设计【论文+8页+0.3万+doc】
mcu141 基于单片机的数据采集处理卡【毕业论文+50页+2.9万+doc】
mcu142 基于单片机的自动计数与装箱控制系统设计【论文+38页+1.5万+doc】
mcu143 基于单片机和USB接口技术的高速数据采集系统的设计【毕业论文+28页+1.8万+doc】 mcu144 基于单片机技术的语音控制小车设计【毕业论文+17页+0.5万+doc】
mcu145 基于单片机控制的三相全控桥触发系统设计【毕业论文+72页+2万+doc】
mcu146 基于单片机控制交通灯设计【毕业论文+19页+0.8万+doc】
mcu147 基于单片机实现的四相步进电机控制器设计【毕业论文+52页+1.1万+doc】
mcu148 基于单片机温室转换控制系统的设计【毕业论文+64页+1.8万+doc】
mcu149 基于电话网的远程控制系统【doc+毕业论文+77页2.4万】
mcu150 基于阀件装配的液压集成块CAD数据库设计【论文+35页+1.6万+doc】
mcu151 基于局网的通用多媒体式抢答系统【毕业论文+41页+1.9万+doc】
mcu152 基于局域网的视频会议系统【doc+毕业论文15+1.0万】
mcu153 基于局域网的视频会议系统【毕业论文+15页+1.1万+doc】
mcu154 基于局域网的通信工具的设计与实现【毕业论文+34页+1.4万+doc】
mcu155 基于可编程技术的交通信号灯系统【论文+24页0.9万+doc】
mcu156 基于凌阳61系列单片机的超声波测距系统【论文+53页+1.5万+doc】
mcu157 基于凌阳SPCE061A单片机水温控制系统【论文+62页+2.1万+doc】
mcu158 基于凌阳十六位单片机的简易复读机【毕业论文+22页+0.9万+doc】
mcu159 基于路由器的网络技术【毕业论文+31页+1.9万+doc】
mcu160 基于面向对象的多媒体播放器设计【vb毕业论文+34页+0.9万+doc】
mcu161 基于模式识别的手写汉字识别系统设计【毕业论文+36页+1.5万+doc】
mcu162 基于模式识别的水果智能分类系统【论文+49页+2.2万+doc】
mcu163 基于逆向工程和快速成型的手机外形快速设计【毕业论文+37页+1.9万+doc】
mcu164 基于软件无线电思想的DSSS通信系统的实现及相关DSP算法设计【论文+70页+2.2万+doc】 mcu165 基于网络的虚拟仪器测试系统【doc格式+56页+毕业论文】
mcu166 基于远程打样系统的硬件设备特征化描述参数的设定研究【毕业论文+doc格式+26页+1.2万字】 mcu167 计算机局域网组建与互连毕业设计论文【doc+12页+9.8千字】
mcu168 计算机窑炉温度控制系统毕业论文【论文+63页+1.6万+doc】
mcu169 甲醛捕捉剂的研制【论文+20页+0.7万+doc】
mcu170 简易信号发生器的设计【论文+20页+0.5万+doc】
mcu171 精密型数控工作台【论文+26页+1.1万+doc】
mcu172 精密仪器售后服务站织与信息传递仿真系研究【论文+8页+0.4万+doc】
mcu173 可编程无线电遥控多通道开关系统【论文+33页+1.4万+doc】
mcu174 立式液压锁紧高压注浆机的设计【论文+49页+1.8万+doc】
mcu175 煤气报警器设计【论文+70页+1.9万+doc】
mcu176 煤气辊道窑控制系统设计【论文+41页+1.9万+doc】
mcu177 某220kv电网潮流计算及输电线路继电保护配置【论文+68页+1.6万+doc】
mcu178 霓虹灯的监控系统设计【论文+37页+1.5万+doc】
mcu179 乒乓球游戏机【毕业论文+21页+0.6万+doc】
mcu180 企业内部网络监控系统【毕业论文+17页+0.5万+doc】
mcu181 汽轮机热力性能计算软件【论文+37页+1.7万+doc】
mcu182 嵌入式测温与报警系平台的设计与实现【论文+43页+.9万+doc】
mcu183 嵌入式系统原理及运用【论文+22页+1.1万+doc】
mcu184 全遥控数字音量控制的D类功率放大器【doc格式+32页+毕业论文】
mcu185 嵌入式系统在多点温度控制中的应用【论文+62页+3.7万+doc】
mcu186 全遥控数字音量控制的D类功率放大器【毕业论文+32页+1.6万+doc】】
mcu187 热电厂化学水PLC控制系统【论文+37页+1.8万+doc】
mcu188 入侵检测系统的设计与实现【doc+毕业论文48+1.6万】
mcu189 室内防盗智能控制系统设计【论文+1.3万+37页+doc】
mcu190 手机汇接装置的设计【论文+80页+2.6万+doc】
mcu191 手写数字识别技术研究与实现【毕业论文41+doc格式+2.1】
mcu192 数字电子秤【论文+20页+0.8万+doc】
mcu193 数控直流稳压电源完整论文【毕业论文+13页+0.6万+doc】
mcu194 数字频率计测频系统【论文+23页+0.6万+doc】
mcu195 数字频率计的设计【毕业论文+60页+1.8万+doc】
mcu196 数字式多路温度采集系统——软件模块【论文+70页+2.1万+doc】
mcu197 数字式多路温度采集系统——硬件模块【论文+57页+1.6万+doc】
mcu198 数字图像处理和模式识别在交通检测中的应用【论文+19页+1.0万+doc】
mcu199 数字图像处理和模式识别在林业中的应用【论文+29页+1.4万+doc】
mcu200 数字显示多路电压设计【论文+35页+1.9万+doc】
mcu201 数字信号处理系统调试方式自动识别模块分析和设计【毕业论文+12页+0.6万+doc】
mcu202 数字信号处理—中频信号特征值提取【论文+23页+1.0万+doc】
mcu203 数字音频编码技术原理及应用【论文+38页+2.4万+doc】
mcu204 双DSP最小系统设计【论文+40页+1.4万+doc】
mcu205 双轴并联混合动力汽车的实时仿真技术研究【论文+44页+2.4万+doc】
mcu206 水平旋转货柜设计【论文+48页+1.8万+doc】
mcu207 水温控制系统【论文+44页+1.4万+doc】
mcu208 水箱单片机控制系统【毕业论文+20页+0.5万+doc】
mcu209 搜索引擎的基本原理探讨与研究【毕业论文+51页+2.3万+doc】
mcu210 太阳能热水器的智能控制器设计【毕业论文+38页+1.7万+doc】
mcu211 提高太阳能光伏电池光电转换效率的方法研究【论文+55页+3.4万+doc】
mcu212 同步电机模型的MATLAB仿真【毕业论文+24页+0.8万+doc】
mcu213 同步电机模型的MATLAB仿真【论文+27页+0.8万+doc】
mcu214 网络录音盒【论文59页+2.9万+doc】
mcu215 微带低通滤波器【论文+19页+0.5万+doc】
mcu216 温度监控系统的设计【doc格式+42页+1.4毕业论文】
mcu217 温度监控系统的设计【毕业论文+42页+1.4万+doc】
mcu218 温度监控系统设计【毕业论文+doc+42页+1.4万字】
mcu219 温室大棚集散控制系统【论文+41页+1.6万+doc】
mcu220 温室自动控制系统【毕业论文+54页+1.7万+doc】
mcu221 卧式机械锁紧高压注浆机的设计【论文+37页+1.6万+doc】
mcu222 无线RS232适配器的设计【毕业论文+doc+16页+1万字】
mcu223 无线传感器网络的研究【开题报告+doc格式+16页+7.6千字】
mcu224 无线传感器网络仿真【毕业论文+197页+6.9万+doc】
mcu225 无线电遥控电动窗帘机论文【论文+38页+1.7万+doc】
mcu226 无线电中的解调算法研究与DSP实现【论文+34页+1.3万+doc】
mcu227 无线红外多路遥控发射接收系统设计与实现【论文+50页+3.1万+doc】
mcu228 无线手持条形码扫描设备数据处理系统【论文+41页+1.0万+doc】
mcu229 无线温度传感器的研究与设计【论文+67页+3.0万+doc】
mcu230 无线遥控实现【论文+0.8万+27页+doc】
mcu231 无线智能家居管理系统【毕业论文+22页+0.6万+doc】
mcu232 限流保安用PTCR的研制【论文+34页+1.9万+doc】
mcu233 消防智能电动车设计与制作【论文+36页+1.3万+doc】
mcu234 消防自动报警控制系统【论文+22页+1.1万+doc】
mcu235 小型网吧的规划与设计【毕业论文+29页+1.2万+doc】
mcu236 心电信号的计算机分析毕业论文【毕业论文+103页+3.6万+doc】
mcu237 心电信号分析系统【毕业论文+94页+3.6万+doc】
mcu238 心电信号分析系统【论文+103页+3.6万+doc】
mcu239 信号采集处理PCI卡的应用【论文+50页+2.9万+doc】
mcu240 悬挂运动控制系统【毕业论文+12页+0.4万+doc】
mcu241 压电陶瓷锋鸣片工厂设计【论文+57页+1.4万+doc】
mcu242 遥感图像空间信息提取过程的研究【论文+43页2.5万+doc】
mcu243 液压原理图智能设计【论文+34页+1.7万+doc】
mcu244 液压原理图智能设计软件开发--图库管理和自动标号【论文+31页+1.4万+doc】
mcu245 依据MP3文件中存放的ID3信息对MP3文件进行分类并将文件索引存储在ID3 database【毕业论文+51页+2.3万+doc】
mcu246 仪器设备管理信息系统的设计和实现【delphi论文+doc+40页+1.7万】
mcu247 移动通信市场营销管理体系的建立和完善【论文+4页+0.5万+doc】
mcu248 用单片机实现温度远程显示【【毕业论文+28页+0.8万+doc】
mcu249 语音电子称重系统设计【毕业论文+39页+1.6万+doc】
mcu250 载波多普勒频率估计同步的设计【论文+55页+2.5万+doc】
mcu251 正交频分复用OFDM技术【论文+60页+2.3万+doc】
mcu252 直流稳压电源设计与制作【论文+17页+0.8万+doc】
mcu253 指纹IC卡考试管理系【毕业论文+56页+1.9万+doc】
mcu254 指纹识别系统(AT89S51单片机)【论文+36页+1.6万+doc】
mcu255 智能IC卡网吧管理系统【论文+61页+1.9万+doc】
mcu256 智能电话远程控制系统【论文+77页+2.4万+doc】
mcu257 智能化小区网络设计规划【毕业论文+46页+1.8万+doc】
mcu258 智能卡网吧管理系统【论文+35页1.3万+doc】
mcu259 智能瓦斯检测仪的设计【论文+38页+2.0万+doc】
mcu260 智能温度、电压监测系统【毕业论文+40页+1.3万+doc】
mcu261 智能无人监控防盗报警系统【论文+70页+3.1万+doc】
mcu262 智能中频电源的控制电路设计【论文+42页+1.5万+doc】 mcu263 终端计费系统【毕业论文+76页+1.8万+doc】
mcu264 自动报警设计【论文+49页+1.7万+doc】
mcu265 自动加料机控制系统【毕业论文+59页+2.4万+doc】
mcu266 自动加料机控制系统【论文+59页+2.4万+doc】
mcu267 自动燃炼锅炉控制器的开发【论文+90页+2.5万+doc】
mcu268 自动售货机控制系统【论文+21页+0.4万+doc】
mcu269 自动行驶模型汽车控制系统的设计【毕业论文+27页+1.1万+doc】 mcu270 自行车里程表的设计【论文+40页+1.0万+doc】
mcu271 钻缝纫机底板侧面孔夹具的设计【论文+36页+2.0万+doc】
第四篇:单片机C语言学习
单片机C语言之一___________________________________________________________________ _____________________ 预处理 一》宏定义:
1、不带参数:
#define 标识符 常量表达式
/*#define是宏定义命令,宏名(标识符)好习惯用大写*/ #define NIL 0x80
2、带参数:/*相当于小函数*/ #define 宏名(参数表)字符串
/*不仅要时行字任串替换还要进行参数的替换,在宏定义时,宏名与带参数的括弧之间不应该加空格,否则将空格以后的字符串都作为替代字符串的一部分,这可是很容易出错的*/ 如:#define SQ(a,b)a*b 使用:x=12;y=10;area=SQ(x,y);/*则area=12*10=120*/ 二》文件包含:
#include <文件名>或#include “文件名” /*在C中用双引用形式更保险,在C51中常用物是尖括弧形式*/ 三》条件编译:
/*一般源程序中的所有程序行都参加编译,但有时希望对其中一部分内容只在满足一定条件下才进行编译,也就是对一部分内容指定编译的条件。*/ #if、#elif、#else、#endif、#ifdef、#ifndef /*选择不同的编译范围,产生不同的代码,提供通用性。*/ /*如对8051在6MHZ与12MHZ下有*/ #ifdef cpu==8051 #define FREQ 6 /*程序段*/ #else #define FREQ 12/*程序段*/ #endif /*这样下面的原程序不用做任何修改便可以使用于两种时钟频率的单片机系统*/ 四》其他:
1、#error:捕捉不可预料的编译条件
#if(myv!=0&&myv!=1)/*假定其值必为0或1*/ #error myv must be 1 or 0/*出错时显示*/ #endif
2、#pragma:用于在程序中向编译器传送各种编译控制命令 #pragma 编译命令序列
/*例:想按如下命令编译ex.c c51 ex.c debug cod large可用:*/
#pragma DB CD LA #pragma disable /*禁止中断*/
单片机C语言之二_____________________________________________________________________________________ 一》数据类型:
char int long 1:unsinged 0~255 0~65535 0~4294967295 2:signed-128~127-32768~32767-2147483648~2147483647 指针:* 3字节 位标量: sbit 特殊功能寄存器:sfr 16位特殊功能寄存器:sfr16 占2个内存单元,0~65535 可寻址位:sbit利用他可访问51单片机的内部RAM中的可寻址位或特殊功能寄存器中的可寻址位 sfr P0=0x80;sbit P0_1=P0^1;/*将P0口的口地址定义为80H,将P0.1位定义为P1_1*/ 二》数据存贮类型
表1.C51数据存贮类型
━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━ 数据存贮类型 ┃ 与存贮空间的对应关系
━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━ data ┃ 直接寻址片内数据存贮区,访速度快 bdata ┃ 可位寻址片内数据存贮区,允许位与字节混合访问 idata ┃ 间接寻址片内数据存贮区,可访问片内全部RAM地址空间
pdata ┃ 分页寻址片外数据存贮区(256字节)由MOVX @R0访问 xdata ┃ 片外数据存贮区(64K),由MOVX @DPTR访问 code ┃ 代码存贮区(64K),由MOVC @DPTR访问
━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━ 变量的存贮类型定义: char data var /*字符变量var被定义为data存贮类型,C51编译器将把该变量定位在51单片机片内数据区存贮区中*/ bit bdata flag /*位变量flag被定义为bdata存贮类型,C51编译器将把该变量定位在51单片机片内数据区存贮区(RAM)中的位寻址区:20H--2FH*/
三》typedef:重新定义数据类型
typedef 已有数据类型 新的数据类型 typedef int word;/*将word定义为整型*/ word i,j;/*将i,j定义为整型*/ 四》位运算符:
━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━━━┳━━━━━━ ~ ┃ & ┃ | ┃ ^ ┃ << ┃ >> ━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━━━╋━━━━━━
按位取反┃ 按位与 ┃ 按位或 ┃ 按位异或 ┃ 左移 ┃ 右移
━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━━━┻━━━━━━
对移位:如<< ,a<<2,即为将二进制的a左移两位,若a=0x8f,即10001111,a=a<<2,将导致a=0x3c(00111100),右边补零。五》条件运算符:
逻辑表达式? 表达式1:表达式2 六》指针与地址运算符: *取内容 &取地址
七》强制类型转换:(类型)=表达式(char *)0xb000 八》sizeof 取数据类型、变量以及表达式的字节数的运算符; 九》continue:中断语句:结束本次循环。
单片机C语言之三_____________________________________________________________________________________ 函数:
一》中断服务函数与寄存器组定义:
函数类型 函数名(形式参数表)[interrupt n][using n] n为中断号,0~31:
━━━━┳━━━━━┳━━━━━ 中断编号┃ 中断向量┃ 入口地址 ━━━━╋━━━━━╋━━━━━ 0 ┃ 外中断0 ┃ 0003H ━━━━╋━━━━━╋━━━━━ 1 ┃ 定时器0 ┃ 000BH ━━━━╋━━━━━╋━━━━━ 2 ┃ 外中断1 ┃ 0013H
━━━━╋━━━━━╋━━━━━ 3 ┃ 定时器1 ┃ 001BH ━━━━╋━━━━━╋━━━━━ 4 ┃ 串行口 ┃ 0023H ━━━━┻━━━━━┻━━━━━
后面的n指的是四个工作寄存器组的一个:0~3 对函数目标代码影响如下:
在函数入口处将当前工作寄存器组保护到堆栈中;指定的工作寄存器内容不会改变,函数返回前将被保护的工作寄存器组从堆栈中恢复!例(定时1ms):
#include
1、如果中断函数中用到浮点运算,必须保存浮点寄存器的状态。(在math.h中保存浮点寄存器函数为pfsave, 恢复浮点寄存器的状态函数为fprestore)
2、如果在中断函数中调用了其他函数,则被调函数所使用的工作寄存器组与中断函数的一致!*/
单片机C语言之四_____________________________________________________________________________________
一、局部变量与全局变量(外部变量):
1、全局变量若不在开头定义则加extern
2、全局变量会使代码长,占用内存多
二、存储方式:
自动变量(auto):缺省,函数调用存在,退出消失。
内部变量 静态变量(static):static int a=5;始终存在,退出不消失,但不能访问。寄存器变量(register):速度最快。通常只给编译器一个建议,由编译器根 据实际情况确定。(见下)变量 全局变量(global): 外部变量
静态变量(static): 寄存器变量例: #include
三、函数的参数和局部变量的存储器模式: 三种存储器模式:small,compact,large.一个函数的存储器模式确定了函数的参数和局部变量在内存中的地址空间 small:内部ram compact, large:外部RAM 函数类型 函数名(形式参数表)[存储器模式] 例:
#pragma large /*默认存储器模式为large*/ extern int calc(char I,int b)small;/*指定small模式*/ extern int func(int I,float f)large;/*指定large模式*/ int large_te(int I,int k)/*未指定,按默认的large模式处理*/ { return(mtest(I,k)+2);}
利用存储器混合模式编程,充分利用有限的存储空间,还可加快程序的执行速度!
单片机C语言之五_____________________________________________________________________________________ 数组 1>初始化数组: unsigned char a[5]={0x11,0x22,0x33,0x44,0x55} 或
unsigned char a[ ] ={0x11,0x22,0x33,0x44,0x55,0x66} 3>数组作为函数的参数:不但可以由变量作为函数的参数外,还可以用数组名作为函数的参数。一个数组数组名表示该数组的首地址。用一个数组名作为函数的参数时,在执行函数调用的过程中参数传递方式采用的是地址传递。将实际参数数组首地址传递给被调函数中的形式参数数组,这样一来两个数组就占有同一段内存单元。见下图:
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 起始地址1000 b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] 用数组名作为函数的参数,应该在主调函数和被调函数中分别进行数组定义而不能只在一方定义数组。而且在两个函数中定义的数组类型必须一致,如果类型不一致将导致编译出错。实参数组和型参数组的长度可以一致可以不一致,编译器对形参数组的长度不做检查,直只是将实参数组的首地址传递给行参数组。如果希望行参数组能得到实参数组的全部元素,则应使两个数组的长度一致。定义型参数组时可以不指定长度,只在数组名后面跟一个方括号[]。这时为了在被调函数中处理数组元素的需要,应另外设置一个参数来传递数组元素的个数。
例:用数组作为函数的参数,计算两个不同长度的数组中所有元素的平均值 #include float pot_1[2]={99.9,88.8};float pot_2[3]={11,22,33.3};average(pot_1,2);average(pot_1,3);} 单片机C语言之六_____________________________________________________________________________________ 软件法去干扰: 工程上我们在采集数据时一般要求精度达到5%%,大于这个值将认为无效。我在实际应用中采用8535对32路数据进行采集(8535带10位AD,带看门狗),发现数据跳动有时达7%%,这是由于各种干扰造成的。主要来自于随机干扰,下面就各种干扰的方法给出简单的去除方法: 1、白噪声:最重要的统计特性为平均值为0,可采取每路数据采集几次求平均的方法; 2、随机干扰:该点明显高于或低于附近正常采样值,故采取中值滤波法,即对被测信号连续采样M次,进行大小排序,取大小居中的1/3个采样值进行算术平均; 3、电源干扰:特点是有固定周期,故可采用定时采样求平均的方法。 由于各种排序与求平均算法用C易于实现,故C常常用于采集系统中软件去干扰。至于排序算法可参考上一篇文章,有一个经典的程序。 在实际中我们采用每路猜9个值,排序,取中间3个,求平均。然后。,每路数据几乎不动! 单片机C语言之七_____________________________________________________________________________________ 指针:可对内存地址直接操作 基于存贮器的指以贮器类为参量,它在编译时才被确定。因此为指针选择存贮器的方法可以省掉,以这些指针的长度可为1个字节(idata *,data *,pdata *)或2个这节(code *,xdata *)。char xdata *address;ADC0809具有8个模拟量输入通道,采用中断方式,在中断函数中读取8个通道的A/D转换值,分别存储在外部RAM的1000H~1007H单元。ADC0809端口地址为00F0H。 程序定义了两个指针变量* ADC和* ADCdata,分别指向ADC0809端口地址(00F0H)和外部RAM单元地址(1000H~1007H) 由*ADC=I送入通道数,启动ADC0809进行A/D转换,转换结束时产生INT1中断。在中断服务函数int1()中通过temp=*ADC和*ADCdata=temp;读取A/D转换结果并存到外部RAM中。#include void main(){ ADC=0x00f0;/*定义端口地址和数据缓冲器地址*/ ADCdata=0x1000;I=8;/* ADC0809有8个模拟输入通道*/ EA=1;EX1=1;IT1=1;/*开中断*/ *ADC=I;/*启动ADC0809*/ WHILE(I);/*等待8个通道A/D转换完*/ } void int1()interrupt 2 { unsigned char tmp;temp=*ADC;/*读取A/D转换结果*/ *ADCdata=temp;/*结果值存到数据缓冲区*/ ADCdata++;/*数据缓冲区地址加1*/ i—;*ADC=I;/*启动下一个模拟输入通道A/D转换*/ } 除了用指针变量来实现对内存地址的直接操作外,c51编译器还提供一组宏,该宏定义文件为:“absacc.h”,利用它可十分方便地实现对任何内存空间的直接操作,改写上面的程序: #include char *s=”abcdef”;int strlen(char *s);printf(“n length of ‘%%s’=%%dn”,s,strlen(s));} int strlen(char *s){ char *p=s;while(*p!=’ ’)p++;return(p-s);} 结果为:length of ‘abcdef’=6 注:不允许指针之间进行加,乘,除,移位,或屏蔽运算,也不允许用float类型数据与指针做加,减运算! 抽象型指针: ANSI新标准增加了一种“void * ”的指针类型,这是一种抽象型指针,即可以定义一个指针变量,但不指定该指针是指向哪种类型的数据的。在赋值时需进行强制类型转换: Char *p1;Void *p2;P1=(char*)p2;抽象型指针可以用来在每个存储区内访问任意绝对地址或者用来产生绝对调用。 单片机c语言学习心得 (一)相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚,更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机(Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机,但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候,我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出,或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看我的单片机书和资料。当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似,编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲的全是C方面的,完全在浪费你的时间!呵呵 ^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定会对以下几个词见的比较多,但是具体的概念还是比较模糊,现作如下说明: (1)编程器编程器是用来烧单片机芯片的,是把HEX或者BIN文件烧到单片机ROM里的。 (2)实验板实验板是专为初学者根据某些要求而特做的板,一般上面就有一个单片机的最小系统,使用者只需写好程序,烧好芯片,放到上面加以验证的这么一个工具。有了实验板,对与初学者来说,省去了焊个最小系统的麻烦。但是对于电子开发人员来说,作用并不是很大 (3)仿真器仿真器是直接把HEX或者BIN文件暂时放在一个芯片里,再通过这个芯片的引脚连接到实验板或者系统上工作。这样以来,可以省去了来回插拔芯片带来的不必要麻烦。 我一开始也不知道上面3个的概念和作用,嘿嘿,原本想买个实验板(不想焊板,因为不可能为了点亮几个流水灯,而去焊个单片机的最小系统)的,可是结果,确和我想的正好相反,人家出售的是编程器。等货物寄到后,才知道自己搞错了!汗。。嘿嘿。现在想想实在是又气又笑。我花了160大样买了个编程器(很不幸的是,这个编程器更本用不了,一烧芯片,芯片就烧坏了)把我给气的,这个编程器,现在还躺在我的抽屉里呢不过,现在想想,唯一让我觉得欣慰的是,那个老板每次能解答我的问题,连那种超级幼稚的问题,他也能不嫌麻烦地尽量帮我解答!这点让我很感动! 第三,想学单片机的必需品--PC。因为写程序,编译或者是仿真都是通过PC完成的。如果没有PC,什么也做不了!!有了PC最好还要可以上网,因为如果你没有可以和你交流单片机的人,遇到自己解决不了的问题,一直都想不通,那么估计你学习单片机的热情就会随着时间的推移而慢慢耗尽。如果你能上网通过论坛或者QQ群,问题就很快得到解决。这样的学习效率一定很高!真正的高手是从论坛中泡出来的! 有了上述3个条件后,你就可以开始学你的单片机了。但是,真的做起来并没有我所说的那么简单。你一定会遇到很多很多的问题。比如为了让单片机实现某个功能,你可能不知道怎么去写某个程序。或是你看懂了资料上某个相似的程序,你自己却写不出来。遇到类似的情况,记住:千万不要急噪,就行! (二)说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; void main(void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效} } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0;类似与C语言中的赋值语句,即把 0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while(--a!= 0) { for(i = 0;i < 125;i++);//一个;表示空语句,CPU空转。 }//i 从0加到125,CPU大概就耗时1毫秒} void main(void) { while(1) { P1_0 = 0; Delay(250); P1_0 = 1; P1_1 = 0; Delay(250); P1_1 = 1; P1_2 = 0; Delay(250); P1_2 = 1; P1_3 = 0; Delay(250); P1_3 = 1; P1_4 = 0; Delay(250); P1_4 = 1; P1_5 = 0; Delay(250); P1_5 = 1; P1_6 = 0; Delay(250); P1_6 = 1; P1_7 = 0; Delay(250); P1_7 = 1; } } sbit 定义位变量,unsigned char a 定义无符字符型变量a,以节省单片机内部资源,其有效值为0~255。main函数调用Delay()函数。Delay函数使单片机空转,LED持续点亮后,再灭,下一个LED亮。while(1)产生循环。第五篇:单片机c语言学习心得转载