PCB实训项目总体方案设计
- 格式:doc
- 大小:1.89 MB
- 文档页数:16
第一组:
实训指导老师:
日期:
目录
绪论 (3)
1.1概述 (3)
1.2设计要求及主要功能介绍 (3)
第二章系统总体方案设计 (4)
2.1系统功能模块的划分 (4)
2.2系统原理框图 (4)
2.3系统仿真原理图 (5)
2.4PCB原理图 (5)
2.5PCB板 (6)
2.6系统硬件设计 (6)
2.7系统软件设计 (7)
2.8硬件设计与调试 (13)
2.9成果展示 (13)
小组总结 (14)
3.1小组成员有话说: (14)
3.2小组总结 (15)
3.3小组评分 (15)
参考文献 (16)
绪论
1.1 概述
单片机以其强大的控制能力已经被广泛应用于诸多领域,配以各种接口传感器可以实现系统的智能化。无论是在工业控制领域、医疗卫生领域、还是在国防军事领域、航天航空领域,微控制器都起着举足轻重的作用。从最初的8位控制器到现在的16位、32位控制器都还有很大的发展和应用空间。
本次实训以贴近实际为主,我们组就设计一个带有测温功能的电子万年历,再设计的过程中将所学的知识运用到实际中来,已达到培养我们运用知识解决实际问题的能力。
1.2 设计要求及主要功能介绍
(1)显示实时时间。由实时时钟芯片DS1302提供实时时间的数据。
(2)显示实时温度。由温度测量芯片DS18B20提供实时温度的数据。
(3)参数修改。由四个按钮来修改参数:加减按钮﹑定位按钮﹑确定按钮。
(4)通讯。通过RX232串口与上位机的通讯,将数据上传给上位机。
第二章系统总体方案设计
2.1 系统功能模块的划分
按照设计要求,系统可以分为以下几个基本功能模块:显示模块参数修改模块﹑通讯模块等。
有些模块的功能是由硬件完成,有些模块的功能由软、硬件配合完成,有些模块则是由软件、硬件、机械三部分共同完成。
将系统拆分成以上的这些基本功能模块后,再根据各个模块所要完成的功能分别去设计,也就是按照“逐步求精”的思想去设计本系统,这将使设计工作细化,也有助于制定进度安排。
2.2 系统原理框图
2.3 系统仿真原理图
2.4 PCB原理图
2.5 PCB板
2.6系统硬件设计
1)该项目的CPU使用AVR系列中的ATMEG16。该芯片能存储16K的指令程序且程序不丢。(并且我们有现成的针对AVR系列单片机的仿真软件和程序编写环境)
2) 实时时间模块用美国DALLAS公司推出实时时间芯片DS1302,
实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电
路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。DS1302可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。
3)实时温度模块用智能温度芯片DS18B20。单线数字温度传感器DS18B20 就是一个1-wire 器件,该器件可把温度直接转换成串行数字信号供微机处理。由于每片DS18B20 含有唯一的硅串行数,所以在一条总线上可
挂接任意多个DS18B20 芯片。从DS18B20 读出的信息或写入DS18B20 的信息,仅需要一根端口线,该端口线同时也可以向DS18B20 供电,从而无需额外电源。DS18B20 提供9~12 位温度读数,构成多点温度检测系统而无需任何外围硬件。
4)参数修改模块采。在该模块中采用四个功能各不相同的按键(加减参
数按钮﹑定位修改按钮﹑确定修改按钮)。
2.7 系统软件设计
该项目相对来说简单,软件也不复杂,我将软件分为如下模块:
1)显示模块:
void CanShuXianShi(int canshu, char dian)
{
char i;
lcd[0]=32; //编号的十位转变为ASCII码
lcd[1]=32; //编号的个位转变为ASCII码
lcd[2]=32; //空格
canshu=canshu*6.25;
if(canshu>=0) lcd[3]=32; //符号处理
else{
canshu=-canshu;
lcd[3]=0x2d; //负号
}
lcd[4]=(uchar)(canshu/10000)+0x30; //参数的万位转变为ASCII码
lcd[5]=(uchar)(canshu/1000%10)+0x30; //参数的千位转变为ASCII码
lcd[6]=(uchar)(canshu/100%10)+0x30; //参数的百位转变为ASCII码
lcd[7]=(uchar)(canshu/10%10)+0x30; //参数的十位转变为ASCII码
lcd[8]=(uchar)(canshu%10)+0x30; //参数的个位转变为ASCII码
//插入小数点
for(i=9;i>9-dian;i--)
lcd[i]=lcd[i-1];
lcd[9-dian]=0x2e;
for(i=4;i<8-dian;i++) //消除参
数前面的0
if(lcd[i]==48)lcd[i]=32;
else break;
}
该函数将温度的值进行剥离,然后再将剥离的每位数填充在数组lcd[9]中,然后在主函数中一位一位的送显示。
2)参数修改模块
if(PINB.0==0&&x==1)
{N++;
delay_ms(10);
}
x=PINB.0;
if(PINB.1==0&&y==1)
{ N--;
delay_ms(10);
}
y=PINB.1;
if(PINB.2==0&&y==1)
{ M++;
delay_ms(10);
if(M>5) M=0;
}
s=PINB.2;
if(M==0) sss=N;
if(M==1) mmm=N;
if(M==2) hhh=N;
if(M==3) yy=N;
if(M==4) mm=N;
if(M==5) dd=N;
zhuanhuan(N);
for(i=0;i<=1;i++)
putchar(i,7,d[i]);
putchar(3,7,M+0x30);
if(PINB.3==0&&z==1)
{rtc_set_time(hhh,mmm,sss);
rtc_set_date(dd,mm,yy);
}
z=PINB.3;
该函数利用四个按键,加减按键用来增减需要修改的参数,定位按键用来定位需要修改参数的位置。