AVR单片机软件设计(proteus)报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013 /2014 学年第一学期
课程设计实验报告
模块名称A VR单片机课程设计(proteus)专业通信工程
学生班级
学生学号
学生姓名
指导教师
AVR单片机软件设计(proteus)报告
一、总体设计原理、思路;
考虑使用数字温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。
二、硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等
实验原理图
a)晶振
晶振为单片机提供时钟信号。单片机XIAL1和XIAL2分别接33PF的电容,中间再并一个晶振,形成单片机的晶振电路。
晶振电路
b)复位电路
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。AVR复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。
AVR的复位信号源有五个:
上电复位。电源电压低于上电复位门限 VPOT 时, MCU 复位。
外部复位。引脚 RESET 上的低电平持续时间大于最小脉冲宽度时MCU 复位。
看门狗复位。看门狗使能并且看门狗定时器溢出时复位发生。
掉电检测复位。掉电检测复位功能使能,且电源电压低于掉电检测复位门限 VBOT 时 MCU 即复位。
JTAG AVR复位。复位寄存器为1 时MCU 复位。
复位电路
ALE引脚悬空,复位引脚接到复位电路、VCC接电源、VSS接地、EA接电源
c )温度传感器(DS18B20)电路
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢
封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1: 技术性能描述
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即
可实现微处理器与DS18B20的双向通讯。
②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里
之前是错误的)1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能
并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3~5V/DC (可以数据线寄生电源)
⑤、在使用中不需要任何外围元件
⑥、测量结果以9~12位数字量方式串行传送
⑦、不锈钢保护管直径Φ6
⑧、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、标准安装螺纹 M10X1, M12X1.5, G1/2”任选
⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
D)LED显示器电路
LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。例如共阴极,如图1所示。管脚配置如图2所示。
图1 共阴极图2 管脚配置共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮;共阳极LED显示器的发光二极管阳极并接。七段LED数码管与单片机连接时,只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。多位七段LED数码管与单片机连接时将所有LED的段选线并联在一起,由一个八位I/O口控制,而位选线分别由相应的I/O口线控制。
三、软件方面程序流程图的设计、关键代码的说明(文字说明,非代码的粘贴);#include
#include"math.h"
#define uchar unsigned char
#define uint unsigned int
#define BIT0 (0X01)
#define BIT1 (0X02)
#define BIT2 (0X04)
#define BIT3 (0X08)
#define BIT4 (0X10)
#define BIT5 (0X20)
#define BIT6 (0X40)
#define BIT7 (0X80)
uchar const BIT[8]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80}; #define fosc 8000000UL
uchar sin_tab[64];
uchar fb_tab[64];
uchar timer1_cnt=0;
uchar flag_bo = 0;
int temp=0;
uchar TH1 = (65536-1000)/256;
uchar TL1 = (65536-1000)%256;
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数 {
unsigned int i=0;
for (i=0;i delay_1us(); } void delayus(unsigned int n) //N us延时函数 { unsigned int i=0; for (i=0;i delay_1us(); } void delay_1ms(void) //1ms延时函数 { unsigned int i; for (i=0;i<1140;i++); } void delay_nms(unsigned int n) //N ms延时函数 { unsigned int i=0; for (i=0;i delay_1ms(); } void delayms(unsigned int n) //N ms延时函数 { unsigned int i=0; for (i=0;i delay_1ms(); } #define KEY_PORT PORTC #define KEY_DDR DDRC #define KEY_PIN PINC #define KEY1_SDT 0 #define KEY2_SDT 1 #define CLR_KEY1_DDR (KEY_DDR&=~BIT[KEY1_SDT]) #define CLR_KEY2_DDR (KEY_DDR&=~BIT[KEY2_SDT]) #define SET_KEY1_GPIO (KEY_PORT|=BIT[KEY1_SDT])