参加电子设计 单片机最小系统实验报告.docx
- 文档编号:10481389
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:46
- 大小:115.89KB
参加电子设计 单片机最小系统实验报告.docx
《参加电子设计 单片机最小系统实验报告.docx》由会员分享,可在线阅读,更多相关《参加电子设计 单片机最小系统实验报告.docx(46页珍藏版)》请在冰豆网上搜索。
参加电子设计单片机最小系统实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
单片机最小系统
一、摘要:
单片机最小系统设计主要在STC89C52单片机上扩展IO口,用ZLG7290芯片扩展键盘和8段数码管显示接口,用TLC5615和TLC1549芯片进行数模间转换,液晶连接单片机IO口。
软件编程控制数码管显示、液晶显示、数模间转换。
二、关键字:
STC89C52、TLC5615、TLC1549、ZLG7290、按键、LED、LCD、8段数码管。
1.设计…………………………………………………………………………3
1.1主要芯片简介…………………………………………………………3
1.1.1ZLG7290芯片………………………………………………
1.1.2TLC5615芯片……………………………………………
1.1.3TLC1549芯片……………………………………………
1.2目的要求……………………………………………………………3
1.2.1目的………………………………………………………4
1.2.2任务………………………………………………………4
2.系统原理…………………………………………………………………4
2.1电源………………………………………………………4
2.2复位及时钟电路…………………………………………4
2.3八段数码显示管…………………………………………5
2.4液晶显示电路……………………………………………5
2.5按键电路…………………………………………………6
2.6ADDA转换电路…………………………………………
3.具体步骤…………………………………………………………………
4.设计总结…………………………………………………………………
5.软件设计…………………………………………………………………
6.参考文献……………………………………………………………………
附录1材料清单
1.设计
1.1主要芯片简介
1.1.1ZLG7290
1.直接驱动8位共阴式数码管(1英寸以下)或64只独立的LED;
2.能够管理多达64只按键,自动消除抖动,其中有8只可以作为功能键使用;
3.段电流可达20mA,位电流可达100mA以上;
4.利用功率电路可以方便地驱动1英寸以上的大型数码管;
5.具有闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能;
6.提供有10种数字和21种字母的译码显示功能,或者直接向显示缓存写入显示数据;
7.不接数码管而仅使用键盘管理功能时,工作电流可降至1mA;
8.与微控制器之间采用I2C串行总线接口,只需两根信号线,节省IO资源;
9.工作电压范围:
+3.3~5.5V;
10.工作温度范围:
-40~+85℃;
11.封装:
DIP-24(窄体),SOP-24。
1.1.2TLC5615
TLC5615是一个串行10位DAC芯片。
只需要3根串行总线就可以完成10位数据的串行输入,易于和工业标准的微控制器或微处理器接口,适用于电池供电的测试仪表、移动电话,也适用于数字的失调与增益调整以及工业控制场合。
其主要特点如下:
1、单5V电源工作
2、3线串行接口
3、高阻抗基准输入端
4、DAC输出的最大电压为2倍的基准输入电压
5、上电时内部自动复位
6、微功耗,最大功耗为1.75mW
7、转换速率快,更新速率为1.21MHZ
1.1.3TLC1549
TLC1549是一个具有串行控制、连续逐渐逼近型的模数转换器,它采用两个差分基准电压高阻输入和一个三态输出构成三态接口。
1、电源电压范围:
-0.5V…6V
2、125摄氏度输入电压范围:
-0.3…VCC+0.3V
3、输出电压范围:
-0.3…VCC+0.3V
4、正基准电压:
VCC+0.1V
5、负基准电压:
-0.1V
6、峰值输入电流:
+20mA或-20mA
7、峰值总输入电流:
+30mA或-30mA
1.2目的要求
1.2.1目的:
通过对单片机最小系统的研究,掌握单片机各引脚功能,理解单片机工作过程及原理,以及与各种外部扩展器件的连接,能够自己运用单片机来解决实际问题。
1.2.2任务:
根据单片机最小系统的连接说明图,完成单片机最小系统的焊接以及调试。
掌握keil等单片机相关软件的使用。
理解小系统的工作原理,掌握实际运用单片机小系统。
2.系统原理
电路是由电源、复位电路、八段数码管显示电路、按键及LED电路、LCD电路、ADDA转换电路等部分组成。
2.1电源
5V电源电路图
2.2复位及时钟电路
复位及时钟电路图
复位电路由按键复位和上电复位两部分组成。
STC89系列单片机为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为8.2K和10uF。
STC89C52RC使用12MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。
2.3八段数码显示管
数码管电路图
电路包含两个共阴8段数码管显示器,使用动态扫描方式驱动。
共阴极作为位选有PNP三极管驱动连接ZLG7290的SEG(A…G),八位段选在通过220Ω限流后连接在ZLG7290的Dig(0…7)上。
由于数码管是共阴的,所以当驱动信号为1时对应的数码管才点亮。
2.4液晶显示电路
液晶电路
电路采用12864液晶显示器,液晶的D(0…7)数据线连接在单片机的P0口上。
RS、WR、LCDEN、RD连接在P1.2、P1.3、P1.4、P1.5上
2.5按键电路
按键电路图
4个独立按键使用10K电阻上拉后连接到单片机的P3.2-P3.5口。
按键没有按下时口线上因为上拉而呈现高电平,当某个按键按下时对应口线会被连接到GND而变成低电平。
另外由于LED的反向截止特性以及按键上拉较弱,P2口及P3.2-P3.5口亦可以兼做通用IO口使用,用来连接外部器件。
MCS51Lite板上也提供了插针方便连接。
2.6ADDA转换器
ADDA转换器电路图
OUTPUT为模拟数据输出引脚,SCLK为读写时钟输入,INPUT是数据输入引脚,DOUT为输入输出引脚。
CS为芯片使能。
3.具体步骤
3.1先按照说明书的器件规格要求,找到每个位置对应的具体器件,特别是电阻和三极管的大小,单片机等各个芯片的缺口要与板子对应。
3.2按照对应的器件把器件牢固的焊接到板子对应的焊盘上,要注意不要让针脚脱落。
3.3使用单片机编程软件keil编写调试所用的程序,比如数码管、ADDA转换、液晶显示。
3.4检测完所有模块没有问题就说明单片机最小系统制作完成,然后撰写课程设计报告。
六、设计总结
单片机最小系统经过我们一段时间的焊接、调试,终于能够达到预定的功能,虽然只是简单的焊接和调试,但从中我们也接触了不少的关于单片机的知识。
此次课程设计让我对单片机有了初步的认识,能够了解单片机工作的模式和具体过程,明白了怎样利用单片机来设计满足自己设定功能的作品,怎样利用单片机来控制系统。
同时,这也让我了解到怎样进行单片机编程。
还有就是通过具体焊接过程掌握了焊接的技巧,锻炼了自己的焊接能力。
掌握了这些就可以在大学期间利用单片机最小系统来拓展功能,制作自己想做的东西,对科研立项等活动有很大的帮助作用。
七、软件设计
*I2C.)ZLG7290_cmd(0x70,(Fn))
#endif_ZLG7290_H_
#ifndef_TLC5615_H_
#define_TLC5615_H_
#include sbitdout=P3^5;数据出口 externvoidDA_Conver(unsignedintDAValue); externvoiddelayda(); #endif #ifndef_TLC1549_H_ #define_TLC1549_H_ sbitAD_CS=P1^7; sbitAD_DAT=P1^6; sbitAD_CLK=P1^5; externvoidTLC1549(); #endif *ZLG7290.c 数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序C文件 Copyright(c)2005,广州周立功单片机发展有限公司 Allrightsreserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的* #include"I2C.b; } *函数: ZLG7290_ReadReg() 功能: 从ZLG7290的某个内部寄存器读出数据 参数: RegAddr: ZLG7290的内部寄存器地址 *dat: 保存读出的数据 返回: 0: 正常 1: 访问ZLG7290时出现异常 *bitZLG7290_ReadReg(unsignedcharRegAddr,char*dat) { bitb; b=I2C_Gets(ZLG7290_I2C_ADDR,RegAddr,1,dat,1); returnb; } *函数: ZLG7290_cmd() 功能: 向ZLG7290发送控制命令 参数: cmd0: 写入CmdBuf0寄存器的命令字(第1字节) cmd1: 写入CmdBuf1寄存器的命令字(第2字节) 返回: 0: 正常 1: 访问ZLG7290时出现异常 *bitZLG7290_cmd(charcmd0,charcmd1) { bitb; charbuf[2]; buf[0]=cmd0; buf[1]=cmd1; b=I2C_Puts(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,1,buf,2); returnb; } *函数: ZLG7290_SegOnOff() 功能: 段寻址,单独点亮或熄灭数码管(或LED)中的某一段 参数: seg: 取值0~63,表示数码管(或LED)的段号 b: 0表示熄灭,1表示点亮 返回: 0: 正常 1: 访问ZLG7290时出现异常 说明: 在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行 *bitZLG7290_SegOnOff(charseg,bitb) { charcmd; cmd=seg&0x3F; if(b)cmd|=0x80; returnZLG7290_cmd(0x01,cmd); } *函数: ZLG7290_Download() 功能: 下载数据并译码 参数: addr: 取值0~7,显示缓存DpRam0~DpRam7的编号 dp: 是否点亮该位的小数点,0-熄灭,1-点亮 flash: 控制该位是否闪烁,0-不闪烁,1-闪烁 dat: 取值0~31,表示要显示的数据 返回: 0: 正常 1: 访问ZLG7290时出现异常 说明: 显示数据具体的译码方式请参见ZLG7290的数据手册 *bitZLG7290_Download(charaddr,bitdp,bitflash,chardat) { charcmd0; charcmd1; cmd0=addr&0x0F; cmd0|=0x60; cmd1=dat&0x1F; if(dp)cmd1|=0x80; if(flash)cmd1|=0x40; returnZLG7290_cmd(cmd0,cmd1); } * I2C.c 标准80C51单片机模拟I2C总线的主机程序 Copyright(c)2005,广州周立功单片机发展有限公司 Allrightsreserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的 * #include"I2C.()函数的开始处,通常应当要执行一次本函数 * voidI2C_Init() { I2C_SCL=1; I2C_Delay(); I2C_SDA=1; I2C_Delay(); } * 函数: I2C_Start() 功能: 产生I2C总线的起始状态 说明: SCL处于高电平期间,当SDA出现下降沿时启动I2C总线 不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态 本函数也可以用来产生重复起始状态 本函数执行后,I2C总线处于忙状态 * voidI2C_Start() { I2C_SDA=1; I2C_Delay(); I2C_SCL=1; I2C_Delay(); I2C_SDA=0; I2C_Delay(); I2C_SCL=0; I2C_Delay(); } * 函数: I2C_Write() 功能: 向I2C总线写1个字节的数据 参数: dat: 要写到总线上的数据 * voidI2C_Write(chardat) { unsignedchart=8; do { I2C_SDA=(bit)(dat&0x80); dat<<=1; I2C_SCL=1; I2C_Delay(); I2C_SCL=0; I2C_Delay(); }while(--t! =0); } * 函数: I2C_Read() 功能: 从从机读取1个字节的数据 返回: 读取的一个字节数据 * charI2C_Read() { chardat; unsignedchart=8; I2C_SDA=1;在读取数据之前,要把SDA拉高 do { I2C_SCL=1; I2C_Delay(); dat<<=1; if(I2C_SDA)dat|=0x01; I2C_SCL=0; I2C_Delay(); }while(--t! =0); returndat; } * 函数: I2C_GetAck() 功能: 读取从机应答位 返回: 0: 从机应答 1: 从机非应答 说明: 从机在收到每个字节的数据后,要产生应答位 从机在收到最后1个字节的数据后,一般要产生非应答位 * bitI2C_GetAck() { bitack; I2C_SDA=1; I2C_Delay(); I2C_SCL=1; I2C_Delay(); ack=I2C_SDA; I2C_SCL=0; I2C_Delay(); returnack; } * 函数: I2C_PutAck() 功能: 主机产生应答位或非应答位 参数: ack=0: 主机产生应答位 ack=1: 主机产生非应答位 说明: 主机在接收完每一个字节的数据后,都应当产生应答位 主机在接收完最后一个字节的数据后,应当产生非应答位 *voidI2C_PutAck(bitack) { I2C_SDA=ack; I2C_Delay(); I2C_SCL=1; I2C_Delay(); I2C_SCL=0; I2C_Delay(); } *函数: I2C_Stop() 功能: 产生I2C总线的停止状态 说明: SCL处于高电平期间,当SDA出现上升沿时停止I2C总线 不论SDA和SCL处于什么电平状态,本函数总能正确产生停止状态 本函数执行后,I2C总线处于空闲状态 *voidI2C_Stop() { unsignedintt=I2C_STOP_WAIT_VALUE; I2C_SDA=0; I2C_Delay(); I2C_SCL=1; I2C_Delay(); I2C_SDA=1; I2C_Delay(); while(--t! =0);在下一次产生Start之前,要加一定的延时 } *函数: I2C_Puts() 功能: I2C总线综合发送函数,向从机发送多个字节的数据 参数: SlaveAddr: 从机地址(7位纯地址,不含读写位) SubAddr: 从机的子地址 SubMod: 子地址模式,0-无子地址,1-单字节子地址,2-双字节子地址 *dat: 要发送的数据 Size: 数据的字节数 返回: 0: 发送成功 1: 在发送过程中出现异常 说明: 本函数能够很好地适应所有常见的I2C器件,不论其是否有子地址 当从机没有子地址时,参数SubAddr任意,而SubMod应当为0 *bitI2C_Puts ( unsignedcharSlaveAddr, unsignedintSubAddr, unsignedcharSubMod, char*dat, unsignedintSize ) { 定义临时变量 unsignedchari; chara[3]; 检查长度 if(Size==0)return0; 准备从机地址 a[0]=(SlaveAddr<<1); 检查子地址模式 if(SubMod>2)SubMod=2; 确定子地址 switch(SubMod) { case0: break; case1: a[1]=(char)(SubAddr); break; case2: a[1]=(char)(SubAddr>>8); a[2]=(char)(SubAddr); break; default: break; } 发送从机地址,接着发送子地址(如果有子地址的话) SubMod++; I2C_Start(); for(i=0;i { I2C_Write(a[i]); if(I2C_GetAck()) { I2C_Stop(); return1; } } 发送数据 do { I2C_Write(*dat++); if(I2C_GetAck())break; }while(--Size! =0); 发送完毕,停止I2C总线,并返回结果 I2C_Stop(); if(Size==0) { return0; } else { return1; } } *函数: I2C_Gets() 功能: I2C总线综合接收函数,从从机接收多个字节的数据 参数: SlaveAddr: 从机地址(7位纯地址,不含读写位) SubAddr: 从机的子地址 SubMod: 子地址模式,0-无子地址,1-单字节子地址,2-双字节子地址 *dat: 保存接收到的数据 Size: 数据的字节数 返回: 0: 接收成功 1: 在接收过程中出现异常 说明: 本函数能够很好地适应所有常见的I2C器件,不论其是否有子地址 当从机没有子地址时,参数SubAddr任意,而SubMod应当为0 *bitI2C_Gets ( unsignedcharSlaveAddr, unsignedintSubAddr, unsignedcharSubMod, char*dat, unsignedintSize ) { 定义临时变量 unsignedchari; chara[3]; 检查长度 if(Size==0)return0; 准备从机地址 a[0]=(SlaveAddr<<1); 检查子地址模式 if(SubMod>2)SubMod=2; 如果是有子地址的从机,则要先发送从机地址和子地址 if(SubMod! =0) { 确定子地址 if(SubMod==1) { a[1]=(char)(SubAddr); } else { a[1]=(char)(SubAddr>>8); a[2]=(char)(SubAddr); } 发送从机地址,接着发送子地址 SubMod++; I2C_Start(); for(i=0;i { I2C_Write(a[i]); if(I2C_GetAck()) { I2C_Stop(); return1; } } } 这里的I2C_Start()对于有子地址的从机是重复起始状态 对于无子地址的从机则是正常的起始状态 I2C_Start(); 发送从机地址 I2C_Write(a[0]+1); if(I2C_GetAck()) { I2C_Stop(); return1; } 接收数据 for(;;) { *dat++=I2C_Read(); if(--Size==0) { I2C_PutAck (1); break; } I2C_PutAck(0); } 接收完毕,停止I2C总线,并返回结果 I2C_Stop(); return0; } #include volatilebitFlagINT=0; sbitLCD_RS=P2^4;寄存器选择输入 sbitLCD_RW=P2^5;液晶读写控制 sbitLCD_EN=P2^6; ucharIRDIS[2]; ucharIRCOM[4]; voiddelay0(ucharx);x*0.14MS voiddataconv(); voidlcd_pos(ucharX,ucharY); uchari=100; unsignedcharKeyValue; unsignedcharRepeatCnt; unsignedcharFnKeyValue; ucharflat; uintA1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参加电子设计 单片机最小系统实验报告 参加 电子设计 单片机 最小 系统 实验 报告