




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机应用设计摘要:关键字:一、 单片机的应用:AT89C52兼容MCS51指令系统 ,具有8k可反复擦写(大于1000次)Flash ROM, 32个双向I/O口,256x8bit内部RAM,3个16位可编程定时/计数器中断,时钟频率0-24MHz,2个串行中断,可编程UART串行通道, 2个外部中断源,共8个中断源,2个读写中断口线,3级加密位,低功耗空闲和掉电模式,软件设置睡眠和唤醒功能,这次我们的单片机应用设计,把下位机与上位机通过串口连接起来,并把单片机处理的数据发送到PC机显示出来,还可以用LCD1602显示数字温度DS18B20芯片测得的温度和PCF8563时钟日历芯片的日期。二、单片机的功能及引脚的介绍:AT89C52是8位通用微处理器,采用工业标准PDIP封装,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。 P0 口P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1 口P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表1。Flash 编程和程序校验期间,P1 接收低8 位地址。P2 口P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3 口P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻 辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。 P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 。P3口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 XTAL1振荡器反相放大器的及内部时钟发生器的输入端。XTAL2振荡器反相放大器的输出端。单片机的硬件组成图:三、 各种模块芯片的介绍:(1) LCD1602LCD1602是市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,下面是LCD1602的引脚图:LCD1602的11条指令:LCD0602的流程图:以下是LCD1602的部分程序:/* 函数名:sentbyte* 功能 :发送一节数* 子函数:readbusy()* 变量 :数据或命令 tybe=1数据 0命令-*/void sentbyte(unsigned char i,unsigned char tybe) unsigned char temp;readbusy(); if(tybe = 1) RW_0(); RS_1(); if(tybe = 0) RW_0();RS_0();temp = i&0xf0;DATA_PORT &=0x0f; DATA_PORT |=temp; E_1(); E_0(); temp = (i15) x=0; y+; if(y=2)y=0; Locate_xy(x,y); (2) PCF8563PCF8563有16个位寄存器,一个可自动增量的地址寄存器,一个内置32.768KHz 的振荡器,带有一个内部集成的电容,一个分频器用于给实时时钟RTC 提供源时钟,一个可编程时钟输出一个定时器,一个报警器,一个掉电检测器和一个400KHz I2C 总线接口。所有 16 个寄存器设计成可寻址的8位并行寄存器,但不是所有位都用前两个寄存器内存地址00H,01H 。用于控制寄存器和状态寄存器内存地址02H 08H 用于时钟计数器秒年计数器地址09H 0CH 用于报警寄存器定义报警条件地址0DH控制CLKOUT管脚的输出频率地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器秒分钟小时日月年分钟报警小时报警日报警寄存器编码格式为BCD,星期报警寄存器不以BCD 格式编码。以下是芯片管脚和描述:PCF8563的流程图:以下是PCF8563的部分程序:/=写一个字节=unsigned char writebyte_8563(unsigned char dat) unsigned int i;unsigned char ack=1;scl_8563 = 0;for(i=8;i0;i-) if(dat&0x80)sda_8563 = 1; else sda_8563 = 0; delay_8563(1); scl_8563 = 1; delay_8563(2); scl_8563 = 0; delay_8563(1); dat0;i-) scl_8563 = 1; dat=dat1; if(sda_8563)dat|=0x01; scl_8563 = 0; delay_8563(2); sda_8563 = 1;scl_8563 = 1;scl_8563 = 0;return(dat);/=初始化pcf8563=void Init_pcf8563(void) unsigned char i,j;for(i=8;i8;i-) if(i=4)j=(timei)&0x07; else j=( (timei/10)4 )&0xf0 )|( (timei%10)&0x0f ); start(); writebyte_8563(0xa2); /选择写8563芯片 writebyte_8563(i+0x02); /写地址 writebyte_8563(j); /写数据 stop(); delay_8563(2); /=读日期=void read_time_8563(void) unsigned char i;for(i=0;i4&0x0f)*10+(sec&0x0f);/BCD码转换成10进制数min=(min&0xf0)4&0x0f)*10+(min&0x0f);/BCD码转换成10进制数hou=(hou&0xf0)4&0x0f)*10+(hou&0x0f);/BCD码转换成10进制数day=(day&0xf0)4&0x0f)*10+(day&0x0f);/BCD码转换成10进制数mon=(mon&0xf0)4&0x0f)*10+(mon&0x0f);/BCD码转换成10进制数year=(year&0xf0)4&0x0f)*10+(year&0x0f);/BCD码转换成10进制数/=写日期=void write_time_8563(void)start(); /写年份writebyte_8563(0xa2);writebyte_8563(0x08);writebyte_8563(year);stop();delay_8563(2);start(); /写月份writebyte_8563(0xa2);writebyte_8563(0x07);writebyte_8563(mon);stop();start(); /写日writebyte_8563(0xa2);writebyte_8563(0x05);writebyte_8563(day);stop();delay_8563(2);start(); /写时writebyte_8563(0xa2);writebyte_8563(0x04);writebyte_8563(hou);stop();delay_8563(2); start();/写分writebyte_8563(0xa2);writebyte_8563(0x03);writebyte_8563(min);stop();delay_8563(2);start(); /写秒writebyte_8563(0xa2);writebyte_8563(0x02);writebyte_8563(sec);stop();delay_8563(2);start(); /写星期writebyte_8563(0xa2);writebyte_8563(0x06);writebyte_8563(week);stop();delay_8563(2);(3)DS18B20DS18B20单总线数字式智能型传感器直接将温度物理量转化为数字信号并以总线方法传送到计算机进行数据处理。DS18B20数字式智能型温度传感器对于实测的温度提供了912位的数据和报警温度寄存器它的测温范围为-55 +125, 其中在-10 +85的范围内的测量精度为0.5。 此传感器可适用于各种领域、各种环境的自动化测量及控制系统。它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点。DS18B20内部结构主要由4部分组成:“ 位RoM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。每一个DS18B20,包括一个唯一的“ 位长的序号该序号值存放在DS18B 内部的RoM(只读存储器)中。寄存器操作时序图:读写操作时序图:以下是温度检测的流程图:以下是DS18B20的部分程序:/* 名 称 :uchar read_one_char(void)* 功 能 :从DS18B20中读出一个字节数据* 返 回 值 :dat:读出一个自己的数据,包括温度等其他数据*/uchar read_one_char(void) unsigned char i = 0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; /给脉冲信号 dat=1; /先进行移位操作,以免最后一位不能读出 DQ = 1; /给脉冲信号 if (DQ) dat |= 0x80; nop(4); return dat;/* 名 称 :void write_one_char(unsigned char dat)* /功 能 :从DS18B20中读出一个字节数据* 功 能 :一个字节数据从单片机中写到DS18B20中去* 输 入 :dat:ROM操作指令或存储器操作指令*/ void write_one_char(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; nop(5); DQ = 1; dat=1; /* 名 称 :int read_temperature(void)* 功 能 :初始化及修改18b20中时间数据*/int read_temperature(void) unsigned char a=0; unsigned char b=0; int t=0; init_DS18B20(); /初始化 write_one_char(0xCC); / 跳过读序号列号的操作 write_one_char(0x44); / 启动温度转换 init_DS18B20(); write_one_char(0xCC); /跳过读序号列号的操作 write_one_char(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a = read_one_char(); b = read_one_char(); t = b; t =4; /t=t*0.0625*1000; return t;(3) 串口通信:#include uart.c/* * 函 数 名: uart_send()* 功 能: 串口送数*/void uart_send(unsigned char temp) /unsigned char temp; ES = 0; /先关闭串口中断 SBUF=0xFF; /*发送温度命令,供上位机识别用*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(unsigned char)(temp/10000); while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(unsigned char)(temp%10000/100); while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ /* * 因为需要同上位机同步,需将BCD码转换成16进制数- 上位机只识别16进制数*/ SBUF=0xFE; /*发送时间命令,供上位机识别用*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(year&0x0F)+(year&0xF0)4)*16; /*发送年*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(mon&0x0F)+(mon&0xF0)4)*16; /*发送月*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(day&0x0F)+(day&0xF0)4)*16; /*发送日*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(hou&0x0F)+(hou&0xF0)4)*16; /*发送小时*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(min&0x0F)+(min&0xF0)4)*16; /*发送分钟*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=(sec&0x0F)+(sec&0xF0)4)*16; /*发送秒*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=0xFC; /*发送星期命令,供上位机识别用*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ SBUF=week; /*发送星期*/ while(TI=0); /*等待发送完*/ TI=0; /*清除TI标志*/ ES = 1; /打开串口中断 (4)main.c流程图:Main.c的部分程序:/* 函 数 名: void initial(void)*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医考资格考试题目及答案
- 徐州市宪法考试题目及答案
- 广电会计招聘考试题库及答案
- 武汉道法考试题库及答案
- 护士报考试题库及答案解析
- 寿司店营销策划方案
- 《阿Q正传(节选)》教学设计 2023-2024学年统编版高中语文选择性必修下册
- (浙江新高考专用版)2024-2025学年高中物理 第十一章 机械振动 4 单摆说课稿 新人教版选修3-4
- Unit 3 Toys Lesson 1(教学设计)-2024-2025学年人教精通版(2024)英语三年级上册
- 华西医院建筑方案设计
- 2025贵州贵安城市置业开发投资有限公司招聘32人考试参考题库及答案解析
- 露天煤业安全生产培训课件
- 2025全国科普日科普知识竞赛题库及答案
- 2025年全国医学基础知识试题(附答案)
- 食堂安全培训课件
- 【课件】角的概念+课件+2025-2026学年人教版(2024)七年+数学级上册+
- 2025企业劳动合同范本新版
- 2025年防雷检测专业技术人员能力认定考试题库及答案
- 《房屋市政工程生产安全重大事故隐患判定标准(2024版)》解读
- 美发裁剪理论知识培训课件
- 舞蹈老师自我介绍课件
评论
0/150
提交评论