数字示波器完整设计过程!.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数字示波器完整设计过程!

基于Mini51板的数字示波器设计 基于Mini51板硬件资源,构思数字示波器的方案已经思考很久了,总是没有集中的时间,一个稍微复杂的设计完成创作需要集中的时间才能完成,这次利用学期结束的一段集中时间,完成了基于LCD12864显示的数字示波器程序设计,现在将文档写出来供大家交流学习用。在此声明,这个教程是写给初学者看的,我会从简单到复杂一步一步详细介绍设计过程,甚至是调试的过程,还包括一些经验总结,特别是提供了完整的keil工程附件。希望读者立足示波器项目,学到更多关于软硬件开发的一些经验技巧。 1 简易数字示波器原理 数字示波器基本原理可以简单理解为:数据采集+图形显示,该过程循环进行,如图1-1所示。 首先是数据采集,这一版我们直接用Mini51板上的ADC“TLC1549”。(如果你没有ADC,也可能没有信号发生器,后面会介绍一种正弦表调试方法。) TLC1549驱动函数unsigned int read_adc(void)。 图1-1 简易数字示波器流程图 unsigned int read_adc(void) { unsigned char i; unsigned int temp=0; ADC_CS = 0; //开启控制电路,使能DA和CK IO引脚 for(i=0;i10;i++) { //采集10次 ,即10bit ADC_CK = 0; temp = 1; if(ADC_DA) temp++; ADC_CK = 1; } ADC_CS = 1; return(temp); }TLC1549.pdf,使用该函数需要注意的是,两次调用该函数之间的间隔要超过21us,AD转换是要一段时间的,在高速系统中时间控制尤其关键。Mini51板单片机在22.1184M晶振时钟频率下运行,连续两次AD采集数据并将数据写入外部扩展RAM变量缓冲区,之间的时间间隔实测略小于21us的,需要适当延时。这在高速档数据采集时增加了一定延时等待就是这个原因。 图形显示有很多种,LCD显示稍难,ADC得到的结果如何在LCD上描点,这确实是一个难点,涉及LCD驱动问题,需要花费很大篇幅才能完成。 最初调试我们可以选用串口来做,借助他人现成的工具软件。下面介绍基于串口和上位机工具软件的波形显示程序设计。 串口初始化函数rs232_port_init(void)。 void rs232_port_init(void) //串口初始化 { SCON=0x50; //串口工作在方式1,异步模式 PCON=0x80; //波特率翻倍 TMOD=0x20; //定时器1工作在方式2 TH1=0xff; //波特率115200,晶振为22.1184MHz TL1=0xff; TR1 = 1; RI = 0; //清空接受标志位 TI = 0; //清空发送标志位 } 往串口写1字节函数void uart_put_uchar(unsigned char c)。 void uart_put_uchar(unsigned char c) //往串口写1字节无符号数据 { SBUF = c; while(!TI); TI = 0; } 从串口读1字节函数unsigned char uart_get_uchar()。 unsigned char uart_get_uchar() //从串口读1字节无符号数据 { while(!RI); RI = 0; return SBUF; } 以上这几个函数是学单片机的人一定要掌握的,能够随手拿来就用,通过串口调试程序,很方便。有了以上4个函数,再建一个keil工程,添加一个主函数,就可以演示了。 #include mini51b.h //所有与硬件相关的接口函数定义 #include uart.h void main() { rs232_port_init(); //串口初始化 read_adc(); //首个ADC数据丢失 while(1) { if(uart_get_uchar()==0x55) uart_put_uchar(read_adc()/4); //10bit/4变8bit } } 在主程序循环中,接收到上位机下发的数据0x55后,读取ADC数据并发送一次,在串口调试助手(例如SSCOM)里,设置相关端口和波特率后,发送0x55,注意HEX(十六进制格式)选项,就可以看到ADC的结果,如图1-2所示。 图1-2 串口调试ADC 调试ADC还有一种更方便的方法,结果直接在Mini51板上的数码管上显示出来,不管你对数码管硬件熟悉不熟悉,只要使用模板程序提供

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档