- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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板上的数码管上显示出来,不管你对数码管硬件熟悉不熟悉,只要使用模板程序提供
您可能关注的文档
最近下载
- 工程设计服务方案.doc VIP
- 【某工业厂房及管理楼水电安装施工方案】.doc
- 国家标准GB_T13306-2011标牌.pptx VIP
- 部编版九年级上册语文第1-3单元综合测试卷(含答案).doc VIP
- 夜袭 (5-6人封闭)剧本杀全套剧本.docx VIP
- 《少年中国说》原文及翻译 .pdf VIP
- 新食品原料β-羟基-β-甲基丁酸钙.docx VIP
- 高中英语_选择性必修二 Unit 3 Understanding Ideas A New Chapter教学课件设计.ppt
- The_Very_Hungry_Caterpillar.ppt VIP
- 《医学心理学》第2章 心理学基础-教学课件(非AI生成).ppt
文档评论(0)