单 片 机 最 小 系 统
设
计报告
学校:湖南科技大学
学院:信息与电气工程学院
班级:09级电子一班
姓名:田 坎
目 录
1、设计 ……………………………………………………………………
1.1 主要芯片简介 ……………………………………………………
1.1.1 HD7279芯片 ………………………………………… 5
1.1.2 MAX232芯片 ………………………………………… 5
1.1.3 DS1302芯片 ………………………………………… 6
1.1.4 24C02芯片 ………………………………………… 6
1.2 目的要求 ………………………………………………………
1.2.1 目的 ………………………………………………… 6
1.2.2 任务 ………………………………………………… 7
2. 系统原理 ………………………………………………………………
2.1 电源 ………………………………………………… 7
2.2 复位及时钟电路 …………………………………… 8
2.3 八段数码显示管 …………………………………… 9
2.4 液晶显示电路 ……………………………………… 9
2.5 按键电路 …………………………………………… 10
2.6 温度测量电路……………………………………… 10
2.7 实时时钟电路……………………………………… 10
2.8 储存电路…………………………………………… 11
2.9 串口………………………………………………… 11
3. 具体步骤 ………………………………………………………… 12
4. 设计总结 ………………………………………………………… 13
5. 软件设计 ………………………………………………………… 13
附录1 材料清单
一、摘要:
单片机最小系统设计主要在STC89C52单片机上, 用MAX232芯片实现串口程序下载,用HD7279A片驱动4*4键盘和8位数码管显示,用DS1302实现实时钟电路,用18b20数字温度传感器实现温度的测量,用24C02芯片实现储存电路,液晶以并行通信的方式连接单片机I/O口。软件编程控制数码管显示、液晶显示、实时时钟以及储存电路。
二、关键字:
STC89C52、MAX232、HD279A、24C20、DS1302、18B20、按键、LCD、8段数码管
三、整体结构框图如图所示。
1.设计
1.1主要芯片简介
1.1.1 HD7279A
HD7279A是一片具有串行接口的,可驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
特点:
1、串行接口,无需外围元件可直接驱动LED
2、各位独立控制译码/不译码及消隐和闪烁属性
3、(循环)左移/(循环)右移指令
4、具有段寻址指令,方便控制独立LED
5、64键键盘控制器,内含去抖动电路
1.1.2 MAX232
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
其主要特点如下:
1、符合所有的RS-232C技术标准
2、只需要单一 +5V电源供电
3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
4、功耗低,典型供电电流5mA
5、内部集成2个RS-232C驱动器
6、内部集成两个RS-232C接收器
7、高集成度,片外最低只需4个电容即可工作。
1.1.3 DS1302
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。电源电压范围:-0.5V…6V
1.1.3 24C02
串行E2PROM是基于I2C-BUS 的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。随着世界上各公司对该器件的开发,市场上推出了许多牌号的24C02器件,甚至还有一些冒牌的24C02器件,这样就使批量生产的单片机控制系统的质量出现时好时坏的问题。笔者经过大量的设计实践和试验摸索找出了24C02在应用中之所以出现数据被冲掉的原因,并总结了一套保护24C02数据安全的软硬件设计方法。
1.1.3
1.2 目的要求
1.2.1 目的:
通过对单片机最小系统的研究, 掌握单片机各引脚功能,理解单片机工作过程及原理,以及与各种外部扩展器件的连接,能够自己运用单片机来解决实际问题。
1.2.2 任务:
根据单片机最小系统的原理图,完成单片机最小系统的焊接以及调试。掌握keil 等单片机相关软件的使用。理解小系统的工作原理,掌握实际运用单片机小系统。
2. 系统原理
电路是由电源、复位电路、串口、八段数码管显示电路、按键及储存电路、时钟电路、温度测量电路、LCD电路等部分组成。
2.1 电源:
5V电源电路图
2.2 复位及时钟电路:
复位及时钟电路图
复位电路由按键复位和上电复位两部分组成。STC89系列单片机为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。
STC89C52RC使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。
2.3 HD72729驱动数码管和按键:
数码管及按键电路图
电路包含两个共阴四位8段数码管显示器,使用HD7279驱动。HD7279是一片具有串行接口的,可以同时驱动8位共阴式数码管的智能显示驱动芯片,该芯片还可以连接多达64键的键盘矩阵,单片即可完成全部功能。
2.4 液晶显示电路:
液晶电路
电路采用12864液晶显示器,液晶的D(0…7)数据线连接在单片机的P0口上。RS、WR、LCDEN连接在P2.2、P2.3、P2.4上。
2.6 温度测量电路:
温度测量电路图
2.7实时时钟电路:
实时时钟电路图
2.8 储存电路:、
24c02 储存电路图
2.9 串口:
串口下载电路图
3. 具体步骤
3.1 先按照器件规格要求,找到对应的具体器件,特别是电阻和电容的大小,单片机等各个芯片的缺口要与底座对应。
3.2 按照对应的器件把器件牢固的焊接到板子对应的焊盘上,要注意不要让针脚脱落。
3.3 使用单片机编程软件keil 编写调试所用的程序,比如数码管、时钟程序、液晶显示等。
3.4 检测完所有模块没有问题就说明单片机最小系统制作完成,然后撰写课程设计报告。
六、 设计总结
单片机最小系统经过我们一段时间的焊接、调试,终于能够达到预定的功能,虽然只是简单的焊接和调试,但从中我们也接触了不少的关于单片机的知识。此次设计让我对单片机有了初步的认识,能够了解单片机工作的模式和具体过程,明白了怎样利用单片机来设计满足自己设定功能的作品,怎样利用单片机来控制系统。同时,这也让我了解到怎样进行单片机编程。还有就是通过具体焊接过程掌握了焊接的技巧,锻炼了自己的焊接能力。掌握了这些就可以在大学期间利用单片机最小系统来拓展功能,制作自己想做的东西,对科研立项等活动有很大的帮助作用。
七、 软件设计
#include<lcd12864.h>
#include<hd7279.h>
#include<ds1302.h>
#include<at24c02.h>
#include<ds18b20.h>
#include<stdio.h>
#include<top.h>
void display_lcd2()
{
unsigned char date[]={'2','0',0,0,'.',0,0,'.',0,0,0};
unsigned char time[9]={0,0,':',0,0,':',0,0,0};
unsigned char number[4]={' ',' ','0',0},i=2,temp;
unsigned char tem[7];
sprintf(tem,"%6.2f",read_ds18b20());
time[0]=read_time_buf[2]/16+'0';
time[1]=read_time_buf[2]%16+'0';
time[3]=read_time_buf[1]/16+'0';
time[4]=read_time_buf[1]%16+'0';
time[6]=read_time_buf[0]/16+'0';
time[7]=read_time_buf[0]%16+'0';
date[2]=read_time_buf[5]/16+'0';
date[3]=read_time_buf[5]%16+'0';
date[5]=read_time_buf[4]/16+'0';
date[6]=read_time_buf[4]%16+'0';
date[8]=read_time_buf[3]/16+'0';
date[9]=read_time_buf[3]%16+'0';
temp=count;
while(temp)
{
number[i]=temp%10+'0' ;
temp/=10;
i--;
}
write_12864_cmd(1);
display_12864(0,0,"日期: ");
display_12864(1,0,"时间: ");
display_12864(2,0,"温度: °C");
display_12864(3,0,"开机: ");
display_12864(0,3,date);
display_12864(1,3,time);
display_12864(2,3,tem);
display_12864(3,5,number);
}
void main()
{
// unsigned char i;
EA=0;
delay(200);
count=read_add(0);
count++;
write_add(0,count);
init_12864();
init2402();
lcd_display1();
hd7279_test();
write_12864_cmd(0x01);
EA=1;
EX0=1;
while(1)
{
Clock_Get_Time(read_time_buf);
delay(100);
display_time();
display_lcd2();
}
}
void int0() interrupt 0
{
EX0=0;
switch(read7279(0x15))
{
case 58:set_time_date();break;
case 55:flag=!flag;break;
}
EX0=1;
}
附录1 材料清单
PLC课程设计
基于单片机与PLC智能家居系统设计与实现
一、课题设计目的:
1、家居控制的自动化,智能化;
2、此设计对于家居生活能达到省事又省心的目的;
3、进一步加深对PLC的熟练应用,并有效地与单片机结合运用。
二、课题所用主要元件及作用:
1、光敏电阻:感测光照;
2、湿敏电阻:感测湿度;
3、温度传感器18B20:测量温度;
4、遥控器:遥控窗帘、收衣杆等;
5、单片机:采集并处理传感器数据,予PLC输入信号;
6、PLC:控制家里的一些设备,这里主要用于控制窗户与收衣杆;
三、课题设计功能:
1、晚上自动把衣服收存起来,将窗户及窗帘关上<Y9>;
2、要是天气下雨,自动把衣服收存起来<Y9>;
3、白天自动把衣服晾出去<Y10>;
4、本系统可以遥控调式和自动调式;
5、温度的测试并由数码管显示,当温度高于上限或低于下限时,自动开启空调使室内温度达到一个合适的值。
四、课题设计的主要内容:
1、梯形图:
2、系统示意图:
3、原理图:
4、单片机程序:
单片机C主要程序程序:
#include <AT89X52.h>
#include <intrins.h >
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
uchar code light[2]={"G:"},shui[3]={"S:%"},tem[4]={"T:.C"};
uchar code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ;
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
uchar data temp_data[2]={0x00,0x00};
uint temp;
bit presence;
uchar a1,a2,a3;
sbit ARDA=P1^0;
sbit ARDB=P1^1;
sbit ARDC=P1^2;
sbit EOC=P1^3;
sbit ST=P1^4;
sbit OE=P1^5;
sbit CLK=P1^6 ;
sbit LCD_RS = P2^0 ;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2 ;
sbit DQ=P2^3;
sbit jdq0=P2^4;
sbit jdq1=P2^5;
sbit jdq2=P2^6;
sbit beep=P2^7;
void delayms(int ms)
{
unsigned char y ;
while(ms--)
{
for(y = 0 ; y<250 ; y++)
{
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
}
}
}
/*************************1602*****************************************/
bit lcd_busy()
{
bit result ;
LCD_RS = 0 ;
LCD_RW = 1 ;
LCD_EN = 1 ;
delayNOP() ;
result = (bit)(P0&0x80) ;
LCD_EN = 0 ;
return(result) ;
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy()) ;
LCD_RS = 0 ;
LCD_RW = 0 ;
LCD_EN = 0 ;
_nop_() ;
_nop_() ;
P0 = cmd ;
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
void lcd_wdat(uchar dat)
{
while(lcd_busy()) ;
LCD_RS = 1 ;
LCD_RW = 0 ;
LCD_EN = 0 ;
P0 = dat ;
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
void lcd_init()
{
delayms(15) ;
lcd_wcmd(0x01) ;
lcd_wcmd(0x38) ;
delayms(5) ;
lcd_wcmd(0x38) ;
delayms(5) ;
lcd_wcmd(0x38) ;
delayms(5) ;
lcd_wcmd(0x0c) ;
delayms(5) ;
lcd_wcmd(0x06) ;
delayms(5) ;
lcd_wcmd(0x01) ;
delayms(5) ;
}
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80) ;
}
/*************************1602******************************************/
void Delay(unsigned int num)
{
while( --num ) ;
}
/**********************ds18b20*********************************************/
Init_DS18B20(void)
{
DQ = 1 ;
Delay(8) ;
DQ = 0 ;
Delay(90) ;
DQ = 1 ;
Delay(8) ;
presence = DQ ;
Delay(100) ;
DQ = 1 ;
return(presence) ;
}
ReadOneChar(void)
{
unsigned char i = 0 ;
unsigned char dat = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ;
dat >>= 1 ;
DQ = 1 ;
if(DQ)
dat |= 0x80 ;
Delay(4) ;
}
return (dat) ;
}
WriteOneChar(unsigned char dat)
{
unsigned char i = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ;
DQ = dat&0x01 ;
Delay(5) ;
DQ = 1 ;
dat>>=1 ;
}
}
Read_Temperature(void)
{
Init_DS18B20() ;
WriteOneChar(0xCC) ;
WriteOneChar(0x44) ;
Init_DS18B20() ;
WriteOneChar(0xCC) ;
WriteOneChar(0xBE) ;
temp_data[0] = ReadOneChar() ;
temp_data[1] = ReadOneChar() ;
}
/*自定义字符写入CGRAM */
/*******************************************************************/
void writetab()
{
unsigned char i ;
lcd_wcmd(0x40) ; //写CGRAM
for (i = 0 ; i< 8 ; i++)
lcd_wdat(mytab[ i ]) ;
}
Disp_Temperature()
{ uchar i,j;
display[4]=temp_data[0]&0x0f ;
display[0]=ditab[display[4]]+0x30 ;
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
display[3]=display[4]/100+0x30 ;
display[1]=display[4]%100 ;
i=display[1]/10;
j=display[1]%10;
display[2]=display[1]/10+0x30 ;
display[1]=display[1]%10+0x30 ;
if(display[3]==0x30)
{
display[3]=0x20 ;
if(display[2]==0x30)
display[2]=0x20 ;
}
lcd_pos(0x43) ;
lcd_wdat(tem[0]);
lcd_wdat(tem[1]);
lcd_wdat(display[3]) ;
lcd_wdat(display[2]) ;
lcd_wdat(display[1]) ;
lcd_wdat(tem[2]);
lcd_wdat(display[0]) ;
writetab() ;
delayms(5) ;
lcd_pos(0x4b) ;
lcd_wdat(0x00) ;
lcd_wdat(tem[3]);
if(i>=2&&j>5)
a1=1;
else
a1=0;
}
wendu()
{
Read_Temperature() ;
Disp_Temperature() ;
if(a1==1)
{ jdq1=0;
beep=0;}
else
{ jdq1=1;
beep=1;}
}
/****************************ds18b20***************************************/
/*****************************光照**************************************/
guangzhao()
{
uchar i,shuzi[4];
uint j;
TR0=1;
ARDA=0;
ARDB=0;
ARDC=0;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
i=P3;
OE=0;
j=(255-i)*(3000/255);
shuzi[0]=j/1000;
shuzi[1]=j%1000/100;
shuzi[2]=j%100/10;
shuzi[3]=j%10;
if(shuzi[0]==0)
{shuzi[0]=10;
if(shuzi[1]==0)
{shuzi[1]=10;
if(shuzi[2]==0)
shuzi[2]=10;}
}
lcd_pos(0x00);
lcd_wdat(light[0]);
lcd_wdat(light[1]);
lcd_wdat(word[shuzi[0]]);
lcd_wdat(word[shuzi[1]]);
lcd_wdat(word[shuzi[2]]);
lcd_wdat(word[shuzi[3]]);
delayms(10);
if(j<=500)
a2=1;
else
a2=0;
}
/*************************光照******************************************/
/**************************湿度*****************************************/
shidu()
{
uchar i,shuzi[3],m;
float j;
ARDA=1;
ARDB=0;
ARDC=0;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
i=P3;
OE=0;
j=(255-i)/255.0*100;
m=(int)j;
shuzi[0]=m/100;
shuzi[1]=m%100/10;
shuzi[2]=m%10;
if(shuzi[0]==0)
{shuzi[0]=10;
if(shuzi[1]==0)
shuzi[1]=10;
}
lcd_pos(0x0a);
lcd_wdat(shui[0]);
lcd_wdat(shui[1]);
lcd_wdat(word[shuzi[0]]);
lcd_wdat(word[shuzi[1]]);
lcd_wdat(word[shuzi[2]]);
lcd_wdat(shui[2]);
delayms(10);
if(m>=50)
a3=1;
else
a3=0;
}
/**************************湿度*****************************************/
/***************主函数 *********************/
void main()
{
TMOD=0x02;
TH0=0xfe;
TL0=0xfe;
ET0=1;
EA=1;
lcd_init();
while(1)
{
guangzhao();
shidu();
TR0=0;
wendu();
if(a2||a3)
jdq0=0;
else
jdq0=1;
}
}
void timer0() interrupt 1
{
TF0=0;
CLK=!CLK;
}
5、实物图:
长沙学院电子工艺实习报告姓名潘舟学号20xx044211系别电子与通信工程时间专业电子信息工程指导老师龙英刘辉王新辉刘亮马凌云目录…
单片机原理及应用技术设计课题系别专业学号姓名指导老师课程设计报告20xx年6月单片机最小系统流水灯的设计一单片机简介由于单片机技术…
单片机最小系统实训报告一实训目的1掌握并理解单片机最小系统的原理及制作牢记最小系统中各元器件的参数及各元器的作用2掌握单片机芯片内…
单片机最小系统设计报告摘要基于AT89C51为核心制作的单片机最小系统含有单片机工作的最基本组成单元电源电路复位电路和振荡电路另外…
福州大学至诚学院电子线路印刷版PCB设计CAD实践报告题目单片机最小系统PCB设计姓名学号系别信息工程专业电子信息工程年级20xx…
单片机最小系统实训报告一实训目的1掌握并理解单片机最小系统的原理及制作牢记最小系统中各元器件的参数及各元器的作用2掌握单片机芯片内…
项目教学法的精髓就是遇到问题不要逃避它应该越挫越勇单片机最小系统设计报告1基本原理分析11单片机简介单片机又叫单片微型计算机是采用…
设计报告单片机最小系统院系信息与电气工程学院专业班级电气工程及其自动化四班姓名XHJ学号XXXXXXXXX指导教师XXXXXX20…
目录第一章功能要求2第二章原理图设计321元器件的绘制322绘制原理图6第三章PCB板的绘制9第四章设计心得与体会10第一章功能要…
单片机最小系统实训报告一实训目的1掌握并理解单片机最小系统的原理和制作熟悉电子元件的参数以及应用2熟悉PCB板的工业制作流程并且要…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…