51单片机及其c语言程序开发实例
❶ 51单片机c语言应用程序设计实例精讲的目录
第1章51单片机开发的基础知识
1.151单片机的硬件结构
1.1.1功能模块
1.1.2CPU
1.1.3并行I/O端口
1.1.4存储嚣结构
1.1.5定时/计数器
1.1.6串行口
1.1.7中断系统
1.251单片机的指令系统
1.2.1寻址方式
1.2.2指令说明
1.2.3指令系统表
1.3本章总结
第2章C语言程序各语句用法与意义
2.1数据结构
2.1.1数据类型
2.1.2变量与常量
2.1.3数组
2.1.4指针
2.1.5结构
2.1.6共用体
2.1.7枚举
2.2运算符与表达式
2.2.1运算符分类与优先级
2.2.2算术运算符与表达式
2.2.3关系运算符与表达式
2.2.4逻辑运算符与表达式
2.2.5位操作运算符与表达式
2.2.6赋值运算符与表达式
2.3程序结构与函数
2.3.1程序结构
2.3.2函数
2.4流程控制语句
2.4.1选择语句
2.4.2循环语句
2.4.3转移语句
2.5本章总结
第3章Keil8051C编译器
3.1Keil编译器简介
3.2使用Keil开发应用软件
3.2.1建立工程
3.2.2工程的设置
3.2.3编译与连接
3.3dScopeforWindows的使用
3.3.1如何启动
3.3.2如何调试
3.3.3调试窗口
3.4本章总结 第4章单片机实现液晶显示
4.1实例说明
4.2设计思路分析
4.2.1液晶显示模块
4.2.2液晶显示工作原理
4.2.3设计思路
4.3硬件电路设计
4.3.1器件选取
4.3.2电源模块
4.3.3液晶显示模块
4.3.4单片机模块
4.4软件设计
4.4.1液晶控制驱动嚣指令集
4.4.2程序说明
4.5实例总结
第5章基于MAX7219的8位数码管显示
5.1实例说明
5.2设计思路分析
5.2.1LED显示驱动芯片的选取
5.2.2MAX7219的工作原理
5.3硬件电路设计
5.3.1主要器件
5.3.2电路原理图
5.4软件设计
5.4.1MAX7219的工作时序和寄存器描述
5.4.2程序说明
5.5实例总结
第6章键盘输入实例——实现4x4键盘
6.1实例说明
6.2设计思路分析
6.3硬件电路设计
6.4软件设计
6.5实例总结
第7章单片机实现语音录放
7.1实例说明
7.2设计思路分析
7.2.1语音芯片选取
7.2.2语音芯片1SD2560简介
7.3硬件电路设计
7.3.1主要器件
7.3.2电路原理图及说明
7.4软件设计
7.4.1程序流程
7.4.2程序说明
7.5实例总结 第8章基于MAX197的并行A/D转换
8.1实例说明
8.2设计思路分析
8.2.1A/D转换原理
8.2.2如何选择A/D转换器件
8.2.3A/D转换器对电源电路的要求
8.3硬件电路设计
8.3.1主要器件
8.3.2电路原理图及说明
8.4软件设计
8.4.1MAX197控制字
8.4.2程序流程
8.4.3程序说明
8.5实例总结
第9章基于TLC549的串行A/D转换
9.1实例说明
9.2设计思路分析
9.2.1芯片选取
9.2.2工作原理
9.3硬件电路设计
9.3.1主要器件
9.3.2电路原理图及说明
9.4软件设计
9.4.1转换过程和时序要求
9.4.2程序流程
9.4.3程序说明
9.5实例总结
第10章基于MAX527的并行D/A转换
10.1实例说明
10.2设计思路分析
10.2.1D/A转换原理
10.2.2如何选择D/A转换器件
10.2.3D/A转换器对电源电路的要求
10.3硬件电路设计
10.3.1主要器件
10.3.2电路原理图及说明
10.4软件设计
10.4.1MAX527的地址和重要引脚
10.4.2程序流程
10.4.3程序说明
10.5实例总结
第11章基于MAX517的串行D/A转换
11.1实例说明
11.2设计思路分析
11.2.1芯片选取
11.2.2工作原理
11.3硬件电路设计
11.3.1主要器件
11.3.2电路原理图及说明
11.4软件设计
11.4.1时序要求和转换过程
11.4.2程序说明
11.5实例总结
第12章基于SHT71数字温/湿度传感器的采集实现
12.1实例说明
12.2设计思路分析
12.2.1SHT71性能概述
12.2.2SHT71的功能说明
12.2.3SHT71的引脚尺寸和说明
12.3硬件电路设计
12.4软件设计
12.4.1SHT71的操作方法
12.42程序流程
12.4.3源程序清单
12.5实例总结
第13章基于DS1624的数字温度计设计
13.1实例说明
13.1.2设计思路分析
13.2.1DS1624简介
13.2.2DS1624基本特性
13.2.3DS1624工作原理
13.2.4DS1624工作方式
13.2.5DS1624的指令集
13.3硬件电路设计
13.3.1硬件设计
13.3.2原理科及其说明
13.4软件设计
13.4.1程序流程
13.4.2程序说明
13.5实例总结 第14章基于DS12C887的实时日历时钟显示系统设计
14.1实例说明
14.2设计思路分析
14.2.1选择合适的日历时钟芯片7
14.2.2如何由DS12C887芯片获取时间信息
14.3硬件电路设计
14.3.1结构框图
14.3.2主要器件
14.3.3电路原理图及说明
14.4软件设计
14.4.1DS12C877的内存空间
14.4.2程序流程
14.4.3程序代码及说明
14.5实例总结
第15章单片机控制的步进电机系统
15.1实例说明
15.2设计思路分析
15.2.1步进电机的工作原理
15.2.2步进电机的控制
15.2.3脉冲分配与驱动芯片的选取
15.3硬件电路设计
15.3.1结构框图
15.3.2主要器件
15.3.3电路原理图厦说明
15.4软件设计
15.4.1程序流程
15.4.2程序说明
15.5实例总结
第16章基于MAX1898的智能充电器设计
16.1实例说明
16.2设计思路分析
16.2.1为何需要实现充电器的智能化
16.2.2如何选择电池充电芯片
16.2.3MAX1898的充电工作原理
16.3硬件电路设计
16.3.1主要器件
16.3.2电路原理图及说明
16.4软件设计
16.4.1程序流程
16.4.2程序说明
16.5实例总结 第17章基于NORFlashAM29LV320的数据存储
17.1实例说明
17.2设计思路分析
17.2.1芯片AM29LV320
17.2.2具体设计思路
17.3硬件电路设计
17.4软件设计
17.4.1AM29LV320的命令与状态
17.4.2串行异步数据传输
17.4.3程序代码说明
17.5实例总结
第18章基于XC95144的串口扩展
18.1实例说明
18.2设计思路分析
18.2.1串口发送的设计
18.2.2串口接收的设计
18.2.3串口模块的设计l
18.3硬件电路设计
18.4软件设计
18.4.1CPLD的设计原理图
18.4.2C51单片机程序代码说明
18.5实例总结
第19章基于8255扩展并行口
19.1实例说明
19.2设计思路分析
19.2.1并行口扩展的原理
19.2.2芯片选择
19.3硬件电路设计
19.4软件设计
19.5实例总结 第20章单片机实现智能信号发生器
第21章单片机实现步进式PWM信号输出
第22章单片机实现CRC算法
第23章单片机实现软件滤波
第七篇通信传输系统设计
第24章单片机实现点对点的数据传输
第25章单片机实现点对多点的数据传输
第26章单片机实现以太网接口
第27章单片机实现1C总线通信
第28章单片机实现RS-485总线现场监测系统
第29章CAN总线接口通信设计
第八篇电源监控与抗干扰设计
第30章单片机监控电路设计
第31章光电隔离电路设计 附录A汇编语言与C语言的混合编程
附录B实例配套实验箱
❷ 大家帮忙找一些51单片机的基本C语言程序例子,最好带说明,谢啦
中断控制程序:
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
#define port_count P2 //P2接8LED接口
//将计数器的二进制值用8个LED显示出来
uchar count;//计数器(存储中断次数)
void main(void)
{
count=0; //清零计数器
port_count=~count;//清零P2口
IT0=1; //INT0设为边沿触发方式�IT0=0则为电平触发方式
EX0=1; //开INT0中断
EA=1; //开系统中断
while(1); //等待中断处理
}
//INT0中断处理函数
void int0_interrupt() interrupt 0 //INT0中断号0
{
count++;
port_count=~count; //当达到255时,溢出,又从0开始
}
I/O控制程序:
#include <AT89X52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define flowlight P2
void delay10ms()
{uchar a,b;
for(a=200;a>0;a--)
for(b=225;b>0;b--);
}
void main()
{
uchar flag=0;//判断移动方向 flag==0 左移 flag==1 右移
uchar port_state=0x01;
flowlight=~port_state;
while(1)
{
delay10ms();
if(port_state==0X80&&flag==0)
{
flag=1; //流水灯左移到第八位又移回来 ~1000 0000
}
else
if(port_state==0X01&&flag==1)
{
flag=0; //流水灯右移到第1位又移回来 ~0000 0001
}
if(flag==0)
{
port_state=port_state<<1;
flowlight=~port_state;
}
else
{
port_state=port_state>>1;
flowlight=~port_state;
}
}
串口通信程序:
主机程序:
#include <AT89X52.H>
#define NODE_ADDR 3 //目的节点地址
#define COUNT 10 //发送缓冲区buffer大小
typedef unsigned char uchar;
uchar buffer[COUNT]; //定义buffer
int pt; //设置指针
main()//////////////////////////////////////////发送程序
{
//buffer初始化
pt=0;
while(pt<COUNT)
{
buffer[pt]='1'+pt; //[buffer]=0X31,[buffer+1]= 0X32,[buffer+2] 0X33........
pt++;
}
////初始化串口和T1(波特率发生器)/////////PCON缺省为0
PCON=0X00;
SCON=0Xc0; //SCON=1100 0000B,置串口为方式3, SM2=0,REN=0,主机不接收地址帧
TMOD=0X20; //20H=0010 0000B,置T1为方式2,TR1控制T1的开关,定时器方式
TH1=253;TL1=253; //方式2为自动重装///f(bps)=9600bps (f(osc)=11.0592MHZ)
TR1=1; //启动T1
ET1=0; //关T1中断 由于自动重装
ES=1; //开串口中断
EA=1; //开系统中断
pt=0;
///////////////发送地址帧
TB8=1; //地址帧标志
SBUF=NODE_ADDR; //发送目的节点地址
while(pt<COUNT); //等待发送完全部数据
while(1);//不执行任何操作
} //end main
/////发送完中断函数
void send()interrupt 4
{
TI=0; //清发送中断标志
if(pt<COUNT)
{
//发送一帧数据
TB8=0;//数据帧标志
SBUF=buffer[pt]; //启动发送
pt++;//指针指向下一单元
}
else
{
ES=0; //关串口中断
EA=0; //关系统中断
return; //若发送完则停止发送并返回
}
}
接收程序:
#include<reg52.h>
#define uchar unsigned char
#define NODE_ADDR 3 //本机节点地址
#define COUNT 10 //定义接收缓冲区buffer大小
uchar buffer[COUNT]; //定义buffer
int pt; //当前位置指针
void send_char_com(unsigned char ch); //向串口发送一个字符的函数声明
void delay(void);
main() ////////////////串行异步从机接收程序
{
PCON=0X00; //初始化串口和T1(波特率发生器)/////////PCON缺省为0
SCON=0XF0; //SCON=1111 0000B,方式3,SM2=1,REN=1,允许接收地址帧
TMOD=0X20; //20H=0010 0000B,置T1为方式2,TR1控制T1的开关,定时器方式
TH1=253;TL1=253; //方式2为自动重装///f(bps)=9600bps (f(osc)=11.0592MHZ)
TR1=1; //启动T1
ET1=0; //关T1中断 由于自动重装
ES=1; //开串口中断
EA=1; //开系统中断
pt=0;
while(pt<COUNT); //等待接收地址帧和全部数据帧
delay() ;
//接收完后返回数据
SCON=0XC0; //SCON=1100 0000B,置串口为方式3, SM2=0,REN=0,主机不接收地址帧
EA=0;
for(pt=0;pt<COUNT;pt++)
{
send_char_com(buffer[pt]);
}
while(1);
} //end main
///////////串口接收中断函数
void receive()interrupt 4 using 3
{
RI=0; //清除接收中断标志
if(RB8==1) //地址帧
{//若为本机地址,则置SM2=0,以便接收数据
if(SBUF==NODE_ADDR)
{
SM2=0;
}
}
/////RB8=0,数据帧
else if(RB8==0)
{buffer[pt]=SBUF; //数据帧送buffer
pt++;
if(pt>=COUNT)
SM2=1; //若接收完全部数据帧,则通信结束;置SM2=1,准备下一次通信
}
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
///////////////////////////////////////////////////////////////////////////////////
void delay(void)
{uchar i=100;
while(i--);
}
❸ 单片机c语言编程100个实例
51单片机C语言编程实例 基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。 在某引脚输出低电平的编程方法:(比如P2.7引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 在某引脚输出方波编程方法:(比如P3.1引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 5. { 6. P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC 7. P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND 8. } //由于一直为真,所以不断输出高、低、高、低……,从而形成方波 9. } 将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) ) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平 5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 6. { 7. if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC 8. { P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND 2 51单片机C语言编程实例 9. else //否则P1.1输入为低电平GND 10. //{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND 11. { P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC 12. } //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平 13. } 将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) ) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平 5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 6. { //取反的方法是异或1,而不取反的方法则是异或0 7. P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出 8. } //由于一直为真,所以不断将P3取反输出到P2 9. } 注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。 第一节:单数码管按键显示 单片机最小系统的硬件原理接线图: 1. 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF 2. 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF 3. 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理 4. 接配置:EA(PIN31)。说明原因。 发光二极的控制:单片机I/O输出 将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。 开关双键的输入:输入先输出高 一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。 代码 1. #include <at89x52.h> 2. #define LED P1^1 //用符号LED代替P1_1 3. #define KEY_ON P1^6 //用符号KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符号KEY_OFF代替P1_7 5. void main( void ) //单片机复位后的执行入口,void表示空,无输入参数,无返回值 6. { 7. KEY_ON = 1; //作为输入,首先输出高,接下KEY_ON,P1.6则接地为0,否则输入为1 8. KEY_OFF = 1; //作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为1 9. While( 1 ) //永远为真,所以永远循环执行如下括号内所有语句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1输出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1输出低,LED灭 13. } //松开键后,都不给LED赋值,所以LED保持最后按键状态。 14. //同时按下时,LED不断亮灭,各占一半时间,交替频率很快,由于人眼惯性,看上去为半亮态 15. } 数码管的接法和驱动原理 一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。 我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。 以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据
❹ 单片机开题报告范文
随着单片机由于其较小的体积和很高的性价比,而在各种电子产品中受到广泛的应用和发展,单片机的研发人员也在不断的进行技术上的革新。下面是我为大家整理的单片机开题报告范文,欢迎阅读。
单片机开题报告范文篇1:
基于单片机数字频率计设计开题报告
一、选题的依据及意义:
本课题主要研究如何用单片机来设计数字频率计。因为在电子技术中,频率的测量十分重要,这就要求频率计要不断的提高其测量的精度和速度。在科技以日新月异的速度向前发展,经济全球一体化的社会中,简洁、高效、经济成为人们办事的一大宗旨。在电子技术中这一点表现的尤为突出,人们在设计电路时,都趋向于用竟可能少的硬件来实现,并且尽力把以前由硬件实现的功能部分,通过软件来解决。因为软件实现比硬件实现具有易修改的特点,如简单的修改几行源代码就比在印制电路板上改变几条连线要容易的多,故基于微处理器的电路往往比传统的电路设计具有更大的灵活性。
因为数字频率计是计算机、通讯设备、音频视频等科研生产领域必不可少的测量仪器,所以频率的测量就显得更为重要。在数字电路中,频率计属于时序电路,它主要由具有记忆功能的触发器构成。在计算机及各种数字仪表中,都得到了广泛的应用。本课题采用的是直接测频式的频率计,设计原理简单、电路稳定、测量精度高,大大的缩短了生产周期。
二、国内外研究概况及发展趋势(含文献综述):
由于当今社会的需要,对信息传输和处理的要求不断提高,对频率的测量的精度也需要更高更准确的时频基准和更精密的测量技术。而频率测量所能达到的精度,主要取决于作为标准频率源的精度以及所使用的测量设备和测量方法。目前,测量频频的方法有直接测频法、内插法、游标法、频差倍增法等等。直接测频的方法较简单,但精度不高。频差倍增多法和周期法是一种频差倍增法和差拍法相结合的测量方法,这种方法是将被测信号和参考信号经频差倍增使被测信号
的相位起伏扩大,再通过混频器获得差拍信号,用电子计数器在低频下进行多周期测量,能在较少的倍增次数和同样的取样时间情况下,得到比测频法更高的系统分辨率和测量精度,但是仍然存在着时标不稳而引入的误差和一定的触发误差。
在电子系统广泛的应用领域中,到处看见处理离散信息的数字电路。供消费用的冰箱和电视、航空通讯系统、交通控制雷达系统、医院急救系统等在设计过程中都用到数字技术。 数字频率计是现代通信测量设备系统中必不可少的测量仪器,不但要求电路产生频率的准确度和稳定度都高的信号,也要能方便的改变频率。
数字频率计的实现方法主要有:直接式、锁相式、直接数字式和混合式
(1)直接式
优点:速度快、相位噪声低,但结构复杂、杂散多,一般只应用在地面雷达中。
(2)锁相式
优点:相位同步的自动控制,制作频率高,功耗低,容易实现系列化、小型化、模
块化和工程化。
(3)直接数字式
优点:电路稳定、精度高、容易实现系列化、小型化、模块化和工程化。
三、研究内容及实验方案:
研究内容:本课题设计以单片机为核心,设计一种数字频率计,应用单片机中的定时器/计数器和中断系统等完成频率的测量。
实验方案:
图1 频率计总体设计框图
四、目标、主要特色及工作进度
目标:
基于单片机的数字频率计,画出电路图并用软件仿真
工作特色:
(1)运用了单片机技术;
(2)运用了C语言、电路等知识;
(3)采用电脑等工具;
(4)采用显示模块、分频模块、单片机模块等;
(5)简单易理解,十分实用。
工作进度:
1、查阅文献,翻译英文资料,书写开题报告; 第1---4周
2、相关资料的获取和必要知识的学习 ; 第5---9周
3、设计系统的硬件和软件模块并调试 第10--14周
4、撰写论文; 第15--16周
5、总结,准备答辩; 第17周
五、参考文献
[1]李学海着.标准80C51单片机基础教程.北京航空航天大学出版社,2006
[2] 戴仙金主编.51单片机及其C语言程序开发实例.清华大学出版社,2008
[3] 李诚人.高宏洋等.嵌入式系统及单片机应用,清华大学出版社,2005
[4] 龚运新编着.单片机C语言开发技术.清华大学出版社,2006
[5] 张天凡等编着.51单片机C语言开发详解.电子工业出版社,2008
[6] 张义和.王敏男等.例说51单片机(C语言版).人民邮电出版社,2008
[7] 张洪润、刘秀英、张亚凡等.单片机应用设计200例 .北京航空航天大学出版社,2006
[8] 彭为、黄科、雷道仲等.单片机典型系统设计实例精讲.电子工业出版社, 2006
[9] 李学海着.标准80C51单片机基础教程.北京航空航天大学出版社,2006
[10] 李朝青.单片机原理及接口技术[M].北京航天航空大学出版社,1998.
[11] 余发山,王福忠.单片机原理应用技术[M].徐州:中国矿业大学出版社,2003.
[12]V.Yu.Teplov,A.V. Anisimov.Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Moles Based on the Peltier Effect[J] ,2002
[13] Yeager Brent.How to troubleshoot your electronic scale[J]. Powder and Bulk Engineering. 1995
[14]WeiXiaoRu,JuJianZhi.Design of a CCD's driving circuit based on ATmega16.Microcomputer&Its Applications,2010,(16).
[15]HeLianYun,The Traffic Signal Lamp System Controlled with Single Chip Microcomputer.Computer Study,2008,(01).
单片机开题报告范文篇2:
基于单片机的火灾报警器
一、毕业设计(论文)课题来源、类型
课题来源:生产(社会)实践
课题类型:毕业设计
二、选题的目的及意义
对于广大居民,尤其是单独居住的老人,无人看护的病人、婴幼儿童等弱势群体在遇到火灾时,行动不便,逃生能力不强,逃生所需时间相对较长,对他们来说火灾的早期报警,争取更多的逃生时间或者及时通知救援人员,避免造成人员伤亡,显得更为重要。
火灾报警器可以让百姓的家居生活更加安全,本报警器是一个由单片机控制的火灾烟雾浓度、温度检测系统,它将传感器输出地电压信号进行A/D转换、滤波、线性化,由单片机将电压值转换为气体浓度和温度送LCD1602液晶显示,并判断是否超过报警上限,若超过,则发出声光报警[1],并将报警情况通过GSM模块发出,同时可以实现消防局对火灾报警的集中接警,专业化处警,以最少的投资实现最快的接警和处警。同时还为接处警人员提供方便快捷的辅助决策手段,提高消防队伍快速反应的能力,密切警民关系。高效的工作,还可以减少火灾给居民带来的人生安全的危害和财产的损失。
三、本课题在国内外的研究状况及发展趋势
以火灾自动报警技术为核心的建筑消防系统,是预防和遏制建筑火灾的重要保障。近年来,我国火灾自动报警工程应用技术实现了较快发展。但由于在实际应用中,火灾自动报警系统的通讯协议不一致,火灾自动报警工程技术水平还相对落后,还存在着一些比较突出的问题。
(1)适用范围过小。我国火灾自动报警系统技术比美、英等发达国家起步较晚,安装范围主要是《高层民用建筑设计防火规范》、《建筑设计防火规范》规定的场所和部位,而在易造成群死群伤的中小型公众聚集场所和社区居民家庭甚至部分高层住宅都没有规定安装火灾自动报警系统,适用范围过小,防范措施不到位。
(2)智能化程度低。我国使用的火灾探测器虽然都进行了智能化设计,但由于传感器探测的参数较少、支持系统的软件开发不成熟、各种算法的准确性缺乏足够验证、火灾现场参数数据库不健全等,火灾自动报警系统难以准确判定粒子(烟气)的浓度、现场温度、光波的强度以及可燃气体的浓度、电磁辐射等指标,造成迟报、误报、漏报情况较多。
(3)网络化程度低。我国应用的火灾119动报警系统形式基本上以区域火灾自动报警系统、集中火灾自动报警系统和控制中心火灾自动报警系统为主,安装形式主要是集散控制方式,自成体系,自我封闭,尚未形成区域性网络化火灾自动报警系统。
(4)组件连接方式有待改善。火灾自动报警系统以多线制和总线制连接方式为主,探测器和报警器及控制器之间是采用两条或多条的铜芯绝缘导线或铜芯电缆穿管相接,存在耗材多、成本高、抗干扰能力差的缺点。同时,铜导线耐高温性能差、易磨损,系统施工维修复杂,影响了火灾自动报警系统的可靠性和更广泛的应用。
(5)火灾自动报警系统误报、漏报问题较多。由于火灾探测器的安装环境极其复杂,加之各种传感器在探测火灾方面存在着某些先天不足,无法准确地感应各种物质在燃烧过程中所特有的声波、光谱、辐射、气味等诸多方面发生的微妙变化,对火灾发生过程中所产生的不同粒径和颜色的烟存在探测“盲区”,误报、漏报现象时有发生。
(6)超早期火灾探测器技术应用还几乎处于空白。国外已开发出适合洁净空间高灵敏度感烟火灾探测报警系统,如激光式高灵敏度烟火灾探测器,吸气式高灵敏度感烟火灾探测报警系统和气体火灾探测报警系统,与普通火灾探测报警系统相比,其探测灵敏度提高了两个数量级,甚至更多,这些系统采用了激光粒子计
数、激光散射等原理监视被保护空间,以单位体积内粒子增加的多少来判断是否发生火灾,系统可在火灾发生前几小时或几天内识别潜在的火灾危险性,实现超早期火灾报警。而该技术我国目前还处于起步阶段,有待进一步研究开发使用[2]。
针对上述问题,火灾自动报警应用技术进一步着眼于当前国际发展的新形势,加快更新改造进程,加强对数字技术和新工艺、新材料的应用,改进系统能力,使火灾自动报警应用技术向着高可靠、低误报和网络化、智能化方向发展。当前,国外火灾自动报警应用技术的发展趋势主要表现为网络化、智能化、多样化、小型化、社区化、蓝牙化、高灵敏化等。这也是火灾自动报警应用技术的研究发展趋势。
四、本课题主要的研究内容
设计一种以STC89C52单片机为核心的火灾检测与报警系统,可以通过气体传感器实时获取可燃气体浓度、温度传感器获得火灾现场温度,并通过LCD1602液晶显示,当浓度或温度超过限定值时则报警并且把报警情况发送到报警器所设定的终端上。以方便人们更好的掌握安全状况,提高生活质量。
五、拟采取的方法、技术或设计(开发)工具
本设计主要以MCS-51系列单片机STC89C52为控制核心,它自带8K的FLASH程序存储器,它的核心处理单元为8位。数据处理主要是对数字温度传感器18B20采集温度数据和对MQ-2烟物传感器进行AD采集,并进行逻辑判断,根据数据的具体情况输出到数码管显示和使蜂鸣器动作[3]。整个单片机应用系统的设计分为硬件电路设计和软件编程设计两大部分;其中硬件电路设计包括温度采集电路,MQ-2烟物传感器电路,单片机控制电路,显示电路,报警与控制电路和GSM模块。软件设计部分包括系统主程序,温度采集子程序,数码管显示子程序,GSM模块子程序和输出驱动子程序,均采用51系列C语言编程实现。
六、本课题进度安排、各阶段预期达到的目标
进度计划:
2014.12.15 - 2015.3.1: 查找资料、搜集相关素材
2015.3.2 - 2015.3.6:完成需求分析
2015.3.7 - 2015.3.12: 完成概要设计
2015.3.13 - 2015.4.1:完成详细设计
2015.4.2 - 2015.4.10完成编码
2015.4.11 - 2015.4.13: 完成软件测试
2015.4.14 - 2015.4.25:整理资料、撰写设计报告
2015.4.26 - 2015.4.30:根据导师要求,完善毕业设计和设计报告
❺ 51单片机及其C语言程序开发实例的介绍
作者:戴仙金出版社:清华大学出版社本书首先简单介绍了51系列单片机的基础知识,然后从工程应用的角度出发,详细地介绍了51系列单片机常用的电路模块,主要包括键盘、LcD显示、A,D转换、D/A转换、I。c总线应用、语音、实时时钟、红外、usB、步进电机、数字锁相环、串口通信、DDs等,同时列举了4个典型的实际工程,包括语音存储与回放系统、数控直流恒流源、简易数字逻辑分析仪、智能电动小车等,目的在于使读者能够迅速地掌握51系列单片机的开发与实现。本书深入浅出,力求既能使单片机的初学者迅速入门,又能使中高级开发人员在原来的基础上进一步提高实际项目开发能力。