ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:164.12KB ,
资源ID:4527658      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4527658.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机ADDA模块应用.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机ADDA模块应用.docx

1、单片机ADDA模块应用 单片微型计算机与接口技术姓名:王义鹏 班级:15电气2班 学号:123220150058 第一题:ADDA1. 系统方案论证及方案选择 1.1 总体设计方案题目要求使用AD转换模块,将模拟信号的值转换为数值并通过液晶屏显示;使用矩阵键盘为输入,使其能够设置报警电压,并能够与AD转换值进行比较;使用DA模块通过矩阵键盘能够产生方波,并且能够调节占空比;1.2方案论证与选择1.2.1 设计要求及思路题目要求使用ADDA模块,将数字模拟量互相转换。我们的设计主要控制是用单片机,它将测得模拟量通过AD模块的转换,在用ASCIl换算成数据显示在液晶屏上。加入矩阵键盘可以设置报警电

2、压,一旦检测AD模块转换的电压高于报警电压,蜂鸣器发出警报,液晶屏显示“warning”。使用DA模块与矩阵键盘连接可以调试产生方波,且可以用按键设计占空比。1.2.2 方案论证与选择芯片选择论证方案一:PCF8591TPCF8591是一种具有I2C总线接口的8位A/D ,D/A转换芯片,在与CPU的信息传输过程中仅靠时钟线SCL与数据线SDA就可以实现。I2C总线是飞利浦公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单,可维护性好,易实现系统扩展,易实现模块化标准化设计,可靠性高等优点;在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式

3、进行传输。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I2C总线的最大速率决定。方案二:ADC0809ADC0809是8 位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁存器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。由于ADC0809芯片需要用到的引脚过多,单片机的接口不允许它占用这么多端口,而PCF8591芯片需

4、要的端口较少并可长时间待机,所以我们选择方案一。2.系统的软硬件2.1主控制芯片 STC89c51STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含4K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51RC系列单片机是单时钟/机器周期(1

5、T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。2.2矩阵键盘矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩

6、阵法来做键盘是合理的。 2.3液晶显示1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。在本次设计中使用液晶屏双行显示报警电压与实测电压,也显示方波的占空比。 2.4蜂鸣器本次实验设计使用蜂鸣器作为报警器,蜂鸣器端口默认为高电平(即为1),不发出警报;当蜂鸣器端口为低电平(即为0)时,蜂鸣器即发出警报;2.5数模转换模块数模转换就是将离散的数字量转换为连接变化的模拟量。与数模转换相对应的就是模数转换,

7、模数转换是数模转换的逆过程。D/A转换:发送给PCF8591的第三个字节被存储到DAC数据寄存器,并使用片上D/A转换器转换成对应的模拟电压。这个D/A转换器由连接至外部参考电压的具有256个接头的电阻分压电路和选择开关组成。模拟输出电压由自动清零单位增益放大器缓冲。这个缓冲放大器可通过设置控制寄存器的模拟输出允许标志来开户或关闭。在激活状态,输出电压保持到新的数据字节被发送。A/D转换:A/D转换器采用逐次逼近转换技术。在A/D转换周期将来临时片上D/A抓换器和高增益比较器。一个A/D转换周期总是开始于发送一个有效读模式地址给PCF8591之后。A/D转换周期在应答时钟脉冲的后沿被触发,并在

8、传输前一次转换结果时执行。一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片被转换为对应的8为二进制码。3.系统操作显示流程图开始进入功能选择进入DA模块按下矩阵键盘的S21按下矩阵键盘的S20液晶屏显示方波占空比进入AD模块输入报警电压被测电压大于报警电压蜂鸣器发出警报,液晶屏显示被测电压+“warning”液晶屏显示被测电压+“save”结束按下S18,占空比增加;按下S19占空比减少结束YESNOADDA流程图附件1 说明书按键布局0123456789.占空比+占空比-进入DA模块进入AD模块按键功能09 .设置最大电压值占空比+方波占空比高电平占有率+10%占空比-方波占空比低

9、电平占有率+10%进入DA模块进入输出方波占空比设置进入AD模块进入AD模块比较电压值使用说明:1.上电显示 2.3.7按键按下可以测量的最大值如 3.7x.x v safe 3.按键按下“进入AD模块”屏幕显示 3.74.5v warning4.如果超出则显示 ,并且蜂鸣器发出警报。3.72.5v safe 5.如果未超出则显示3.7 502.5v safe3.7 402.5v safe6.如果按下“进入DA模块”则显示7.当按下“占空比+”显示 3.7 60 2.5v safe 8.如果按下“占空比-” 显示 附件 2 程序#include #include #include#define

10、 OP_WRITE 0x90 /PCF8591地址#define OP_READ 0x91#define uchar unsigned char #define uint unsigned intsbit BEEP = P23; /蜂鸣器sbit SDA = P20; /I2C串行数据sbit SCL = P21; /I2C串行时钟sbit RS=P10;sbit RW=P11;sbit EN=P12; uchar K,Key;char b10=v safe ;double aa;char pd,n,xsd,d=50,l=50;char a=0123456789. ;uchar table11

11、0=v warning;void delayNOP() _nop_();_nop_();_nop_();_nop_();void delay(unsigned char t) char i; while(t-) for(i=0;i125;i+); void start() SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP(); SCL = 0; void stop() SDA = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; uchar shin() / 从AT24C02移出数据到MCU uchar i,

12、read_data; for(i = 0; i 8; i+) SCL = 1; read_data = 1; read_data |= SDA; SCL = 0; return(read_data); bit shout(uchar write_data) / 从MCU移出数据到AT24C02 uchar i; bit ack_bit; for(i = 0; i 8; i+) / 循环移入8个位 SDA = (bit)(write_data & 0x80); /写数据,将R/W置1 _nop_(); SCL = 1; delayNOP(); SCL = 0; write_data = 1; /

13、左移1位,高位移出 SDA = 1; / 读取应答 delayNOP(); SCL = 1; delayNOP(); ack_bit = SDA; SCL = 0; return ack_bit; / 返回AT24C02应答位 void write_byte(uchar addr, uchar write_data) / 在指定地址addr处写入数据write_data start(); shout(OP_WRITE); /发出写命令 shout(addr); /先输出地址 shout(write_data); /后写数据 stop(); delay(10); / 写入周期 uchar rea

14、d_current() / 在当前地址读取 uchar read_data; start(); shout(OP_READ); read_data = shin(); stop(); return read_data; uchar read_random(uchar random_addr) / 在指定地址读取 start(); shout(OP_WRITE); shout(random_addr); return(read_current(); void wcmd(uchar cmd)RS=0;RW=0;P0=cmd; delay(5);EN=1;delay(5);EN=0;delay(5)

15、;void wdat(uchar dat)RS=1;RW=0;P0=dat;delay(5);EN=1;delay(5);EN=0;delay(5);void init() EN=0; wcmd(0x01); delay(5); wcmd(0x06); delay(5); wcmd(0x0c); delay(5); wcmd(0x38); delay(5);unsigned char data1_conve(unsigned char dat_temp) unsigned char data1; data1=(unsigned char)(float)dat_temp/255)*5); /换算

16、为电压值的个位值 data1=data1+48; /转换为对应的ASCII码,因为0对应ASCII码的48,以此类推 return data1; unsigned char data0_convert(unsigned char dat_temp) unsigned char data0,data1; data1=(unsigned char)(float)dat_temp/255)*5); /换算为电压值的个位值 data0=(unsigned char)(float)dat_temp/255)*5-data1)*10); /换算为为电压值的小数点后第一位的那个值 data0=data0+4

17、8; return data0; /转换为对应的ASCII码 unsigned char Keycan(void) /按键扫描程序 P3.0-P3.3为行线 P3.4-P3.7为列线 unsigned char rcode, ccode; P3 = 0xF0; / 发全0行扫描码,列线输入 if(P3&0xF0) != 0xF0) / 若有键按下 delay(3);/ 延时去抖动 if(P3&0xF0) != 0xF0) rcode = 0xFE; / 逐行扫描初值 while(rcode&0x10) != 0) P3 = rcode; / 输出行扫描码 if(P3&0xF0) != 0xF0

18、) / 本行有键按下 ccode = (P3&0xF0)|0x0F; while(P3&0xF0) != 0xF0); /等待键释放 return (rcode) + (ccode); / 返回键编码 else rcode = (rcode10|l10|d100)l=l+10;d=d-10;break; case 0x48: K=14;pd=2;break; case 0x88: K=15;pd=1;break; default: break; if(K10) if(xsd=0) aa=aa*10+K; else n+; aa=aa+pow(0.1,n)*K; if(K aa) BEEP = 0; for(i=0;i9;i+) wdat(table1i); else BEEP = 1; for(j=0;j9;j+) wdat(bj); delay(5); if(pd=2) ll=l; dd=d; wcmd(0x85); wdat(ll/10); wcmd(0x86); wdat(ll%10) while(l-) write_byte(0x40, 255); while(d-) write_byte(0x40, 0 );

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1