各类芯片文档格式.docx
- 文档编号:20610859
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:37
- 大小:167.20KB
各类芯片文档格式.docx
《各类芯片文档格式.docx》由会员分享,可在线阅读,更多相关《各类芯片文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
要求:
1.用DS1302来实现对时间的计算;
2.用LCD1602来显示时间;
3.用独立式键盘来进行调时;
4.用DS18B20获取温度参数;
5.用CH341T与PC进行数据同步。
三.功能描述
1.设置按键进行时间、闹铃以及PC同步设置,调整内容切换。
2.进入设置界面后,在按设置键可以将设置焦点移到下一个设置项中。
3.在设置界面按+键后被设置的选项增加1;
按-键后被设置的选项减少1。
4.在设置状态按下退出键立即返回时间显示界面。
5.在时间显示界面按退出键,进入秒表模式。
6.在秒表模式按设置键可暂停秒表,在按设置键恢复秒表。
7.在时间显示界面按下+键可进行摄氏度和华氏度之间的转换(C/F)。
四.系统图
五.
系统器件简介
(1)AT89S52
图1
AT89S52(图1)是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
(2)
DS1302
DS1302(图2)是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
图2
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
图3
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
(3)DS18B20
DS18B20(图3)DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°
C~+125°
C,在-10~+85°
C范围内,精度为±
0.5°
C。
DS1822的精度较差为±
2°
C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20、DS1822的特性DS18B20可以程序设定9~12位的分辨率,精度为±
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!
性能价格比也非常出色!
DS1822与DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±
2°
C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
(4)LCD1602
LCD1602是字符型液晶显示器(图4)
①液晶显示原理
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、
单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。
(图4)
③液晶显示器各种图形的显示原理:
线段的显示
图5
点阵图形式液晶由M×
N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×
8=128个点组成,屏上64×
16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;
当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;
当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×
8或8×
8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
汉字的显示
汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。
(5)CH341T
CH341T(图5)是一个USB总线的转接芯片,通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。
在异步串口方式下,CH341T提供串口发送使能、串口接收就绪等交互式的速率控制信号以及常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。
在打印口方式下,CH341T提供了兼容USB相关规范和Windows操作系统的标准USB打印口,用于
将普通的并口打印机直接升级到USB总线。
在并口方式下,并行接口,用于在不需要单片机/DSP/MCU
的环境下,直接输入输出数据。
除此之外,CH341T芯片还支持一些常用的同步串行接口。
六.原理图
七.元件清单
元件名称
元件标号
元件型号
元件数量
电阻
R1
5K
1
R2
1K
RP
10K*8
陶瓷电容
C1
0.1μ
C2
0.01μ
C3C4
20P
2
C6C7
30P
电解电容
C5
16V/10μ
晶体
X1
12M
X2
32.768K
X3
11.0952M
USB芯片
U1
CH341T
时钟芯片
U2
传感器
U3
DS18B20
MCU
U4
AT89S52
按键
K1-K5
--
5
三极管
Q1
9012
蜂鸣器
SP1
液晶屏幕
LCD1602
导线
若干
排针
芯片插槽
八.I/O口分配
引脚名称
功能模块
定义内容
P1.0
温度传感器
QD
P1.3
SCLK
P1.4
I/O
P1.5
CE
P3.0
USB通讯芯片
TX
P3.1
RX
P3.3
P0.0
LCD显示模块
D7
P0.1
D6
P0.2
D5
P0.3
D4
P0.4
D3
P0.5
D2
P0.6
D1
P0.7
D0
P2.7
E
P2.6
R/W
P2.5
R/S
P2.3
键盘接口
Menu
P2.2
+
P2.1
-
P2.0
Ok
九.程序流程图
一十.源程序
#include<
reg51.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitDS1302_CLK=P1^3;
//实时时钟时钟线引脚
sbitDS1302_IO=P1^4;
//实时时钟数据线引脚
sbitDS1302_RST=P1^5;
//实时时钟复位线引脚
sbitwireless_1=P3^0;
sbitwireless_2=P3^1;
sbitwireless_3=P3^2;
sbitwireless_4=P3^3;
sbitACC0=ACC^0;
sbitACC7=ACC^7;
charhide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;
//秒,分,时到日,月,年位闪的计数
sbitSet=P2^0;
//模式切换键
sbitUp=P2^1;
//加法按钮
sbitDown=P2^2;
//减法按钮
sbitout=P2^3;
//立刻跳出调整模式按钮
sbitDQ=P1^0;
//温度传送数据IO口
chardone,count,temp,flag,up_flag,down_flag;
uchartemp_value;
//温度值
ucharTempBuffer[5],week_value[2];
/****************液晶显示函数**************/
voidshow_time();
//液晶显示程序
sbitLcdRs=P2^5;
sbitLcdRw=P2^6;
sbitLcdEn=P2^7;
sfrDBPort=0x80;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
unsignedcharLCD_Wait(void)//内部等待函数
{
LcdRs=0;
LcdRw=1;
_nop_();
LcdEn=1;
LcdEn=0;
returnDBPort;
}
#defineLCD_COMMAND0
#defineLCD_DATA1
#defineLCD_CLEAR_SCREEN0x01//清屏
#defineLCD_HOMING0x02//光标返回原点
voidLCD_Write(bitstyle,unsignedcharinput)//内部等待函数
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
//注意顺序
LCD_Wait();
//设置显示模式
#defineLCD_SHOW0x04//显示开
#defineLCD_HIDE0x00//显示关
#defineLCD_CURSOR0x02//显示光标
#defineLCD_NO_CURSOR0x00//无光标
#defineLCD_FLASH0x01//光标闪动
#defineLCD_NO_FLASH0x00//光标不闪动
voidLCD_SetDisplay(unsignedcharDisplayMode)
LCD_Write(LCD_COMMAND,0x08|DisplayMode);
//设置输入模式
#defineLCD_AC_UP0x02
#defineLCD_AC_DOWN0x00//default
#defineLCD_MOVE0x01//画面可平移
#defineLCD_NO_MOVE0x00//default
voidLCD_SetInput(unsignedcharInputMode)
LCD_Write(LCD_COMMAND,0x04|InputMode);
//初始化LCD
voidLCD_Initial()
LCD_Write(LCD_COMMAND,0x38);
//8位数据端口,2行显示,5*7点阵
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
//开启显示,无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
//清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
//AC递增,画面不动
voidGotoXY(unsignedcharx,unsignedchary)//液晶字符输入的位置
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
voidPrint(unsignedchar*str)//将字符输出到液晶显示
while(*str!
='
\0'
)
{
LCD_Write(LCD_DATA,*str);
str++;
}
/***********DS1302时钟部分子程序******************/
typedefstruct__SYSTEMTIME__
unsignedcharSecond;
unsignedcharMinute;
unsignedcharHour;
unsignedcharWeek;
unsignedcharDay;
unsignedcharMonth;
unsignedcharYear;
unsignedcharDateString[11];
unsignedcharTimeString[9];
}SYSTEMTIME;
//定义的时间类型
SYSTEMTIMECurrentTime;
#defineAM(X)X
#definePM(X)(X+12)//转成24小时制
#defineDS1302_SECOND0x80//时钟芯片的寄存器位置,存放时间
#defineDS1302_MINUTE0x82
#defineDS1302_HOUR0x84
#defineDS1302_WEEK0x8A
#defineDS1302_DAY0x86
#defineDS1302_MONTH0x88
#defineDS1302_YEAR0x8C
voidDS1302InputByte(unsignedchard)//实时时钟写入一字节(内部函数)
{
unsignedchari;
ACC=d;
for(i=8;
i>
0;
i--)
DS1302_IO=ACC0;
//相当于汇编中的RRC
DS1302_CLK=1;
DS1302_CLK=0;
ACC=ACC>
>
1;
}
unsignedcharDS1302OutputByte(void)//实时时钟读取一字节(内部函数)
1;
//相当于汇编中的RRC
ACC7=DS1302_IO;
return(ACC);
voidWrite1302(unsignedcharucAddr,unsignedcharucDa)//ucAddr:
DS1302地址,ucData:
要写的数据
DS1302_RST=0;
//Write1302(0x8e,0x00);
DS1302_RST=1;
DS1302InputByte(ucAddr);
//地址,命令
DS1302InputByte(ucDa);
//写1Byte数据
}
unsignedcharRead1302(unsignedcharucAddr)//读取DS1302某地址的数据
unsignedcharucData;
DS1302InputByte(ucAddr|0x01);
//地址,命令
ucData=DS1302OutputByte();
//读1Byte数据
return(ucData);
voidDS1302_GetTime(SYSTEMTIME*Time)//获取时钟芯片的时钟数据到自定义的结构型数组
unsignedcharReadValue;
ReadValue=Read1302(DS1302_SECOND);
Time->
Second=((ReadValue&
0x70)>
4)*10+(ReadValue&
0x0F);
//高三位取出读出乘⑩
ReadValue=Read1302(DS1302_MINUTE);
Minute=((ReadValue&
ReadValue=Read1302(DS1302_HOUR);
Hour=((ReadValue&
4)*10+(ReadValu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 各类 芯片