1、基于以上方案和课程设计的要求,我们优先选用了:二、硬件设计 这个电路主要芯片有ADC0832、单片机AT89S52和LCD1602组成,下面分别介绍一下它们的功能:ADC08321主要特性1)2路8位AD转换器,即分辨率8位。 2)具有转换起停控制端。3)转换时间为100s4)单个5V电源供电 5)模拟输入电压范围05V,不需零点和满刻度校准。6)工作温度范围为-4085摄氏度 2内部结构ADC0832内部结构框图 图1 ADC0832引脚图3外部特性(读写时序) ADC0832时序 正常情况下 ADC0832 与单片机的接口应为 4条数据线,分别是 CS、CLK、DO、DI。但由于 DO端与
2、 DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将 DO和 DI 并联在一根数据线上使用。 (见图 3) 当 ADC0832未工作时其 CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行 A/D转换时,须先将 CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲,DO/DI端则使用 DI端输入通道功能选择的数据信号。在第 1 个时钟脉冲的下沉之前 DI端必须是高电平,表示启始信号。在第 2、3个脉冲下沉之前 DI端应输入 2 位数据用于选择通道功能,其功能项见下表。 如
3、上表 所示,当此 2 位数据为“1” 、 “0”时,只对 CH0 进行单通道转换。当 2位数据为“1” 、 “1”时,只对 CH1进行单通道转换。当 2 位数据为“0” 、“0”时,将 CH0作为正输入端 IN+,CH1作为负输入端 IN-进行输入。当 2 位数据为“0” 、 “1”时,将 CH0作为负输入端 IN-,CH1 作为正输入端 IN+进行输入。 到第 3 个脉冲的下沉之后 DI端的输入电平就失去输入作用,此后 DO/DI端则开始利用数据输出 DO进行转换数据的读取。 从第 4个脉冲下沉开始由 DO端输出转换数据最高位 DATA7,随后每一个脉冲下沉 DO端输出下一位数据。直到第 1
4、1个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11个字节的下沉输出 DATD0。随后输出 8位数据,到第 19 个脉冲时数据输出完成,也标志着一次 A/D转换的结束。最后将 CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。AT89S521、AT89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K在系统可编程Flash存储器,32位I/O口线,三个16位定时器/计数器,另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。2、引脚结构及作用 AT89S52管脚图三、软件设计#include
5、string.hkey.hsbit dc=P30; /*LCD 的RS */sbit rw=P31; /*LCD 的R/W */sbit cs=P32; /*LCD 的E */sbit ADC_CS =P34;sbit ADC_CLK=P35;sbit ADC_DO =P37;sbit ADC_DI =P36;sfr lcdbus=0xa0; /*p0LCD 数据 D0=P2*/*写LCD命令*/void lcd_wrcmd(unsigned char lcdcmd) /8 lcdusing1=1; while(lcd_checkbusy(); lcdbus=lcdcmd; dc=0; /*d
6、c=1为数据,=0 为命令.*/ rw=0; /*rw=1为读,=0为写.*/ cs=1; /*cs=1选通.*/ soft_nop(); cs=0; lcdbus=0xff;/8 lcdusing1=0;/*在当前显示位置显示数据*/void lcd_wrdata(char lcddata)/* char i; lcdusing2=1; if(lcdcounter=20) lcd_moveto(20); while(lcd_checkbusy(); if(lcdcounter=40) lcd_moveto(40); if(lcdcounter=60) lcd_moveto(60); if(l
7、cdcounter=80) lcd_moveto(0); lcdcounter=0; /*为通用而如此 lcdcounter+; */ lcdbus=lcddata; dc=1;/ lcdbus=0xff;/ lcdusing2=0;/*/* 设置显示字符的位置/* X为列坐标,Y为行坐标 void lcd_set_xy (char x,char y) /x =015 y= 01 char xy ; xy = (x+0x80)+y*0x40 ; lcd_wrcmd (xy); /delayNms(10);/*在指定显示位置显示LCD 字符串*/* 显示字符串/* 在adr坐标处显示一个字符vo
8、id lcd_string(unsigned char adr ,unsigned char *strpoint) /register i=0; unsigned char i = 0; unsigned char row,colum ; while(strpointi!=0) row = adr / 16 ; colum = adr % 16 ; lcd_set_xy(colum,row) ; lcd_wrdata(strpointi); adr+; i+;/* 显示单字符/* 在address坐标处显示一个字符aa void lcd_char(unsigned char address,u
9、nsigned char aa ) / address =031 row = address / 16 ; colum = address % 16 ; lcd_set_xy(colum,row) ; lcd_wrdata(aa);/ cs = 0 ; void lcd_init()/*初始化*/ lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/ lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/ lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/ lcd_wrcmd(0x01); /*清除显示*/ lcdcounter=0;void De
10、lay(unsigned char x) unsigned char i; for(i=0;ix;i+); /延时,脉冲一位持续的时间unsigned char ReadADC(void) /把模拟电压值转换成8位二进制数并返回 unsigned char i,ch; ch=0; ADC_CS=0; ADC_DO=0;/片选,DO为高阻态10;i+) ; ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; /第一个脉冲,起始位 /第二个脉冲,DI=1表示双通道单极性输入 /第三个脉冲,DI=1表示选择通道1(CH2) ADC_DI=0; ADC_DO=1;/DI
11、转为高阻态,DO脱离高阻态为输出数据作准备 for (i=0; i8; i+) ch=(ch1)|ADC_DO;/在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数 ADC_CS=1;/取消片选,一个转换周期结束 return(ch);/把转换结果返回void main() unsigned char i,j; unsigned int jiang; unsigned char hong=0x00; unsigned char jj3;lcd_init(); while (1) hong=ReadADC(); jiang = (unsigned int)hong*50)/(unsign
12、ed int)255; jj0=jiang/10; jj2=jiang%10;lcd_string(0,0,jj);六、总结 本次课程设计对点阵显示电路认真的学习以及对单片机技术有了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于课本,一个看似很简单的电路,要动手把它设计出来就比较困难了,因为是设计要求我们在以后的学习中注意这一点,要把课本上所学到的知识和实际联系起来,同时通过本次电路的设计,不但巩固了所学知识,也使我们把理论与实践从真正意义上结合起来,增强了学习的兴趣,考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。通过这次设计不仅锻炼了我们的团队协作精神,而且
13、提高了创新能力。在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高,而且在与老师和同学的交流过程中,互动学习,将知识融会贯通。更重要的是我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。不管怎样,这些都是一种锻炼,一种知识的积完全可以把这个当作基础东西,只有掌握了这些最基础的,才可以更进一步,取得更好的成绩。九、参考文献1、单片机原理及应用 张毅刚、刘杰 哈尔宾工业大学2、单片机基础第三版 李广弟、朱月秀、冷祖祁 人民邮电3、单片机的C语言应用程序设计 马忠梅、张凯北航大学4、51系列单片机 楼然苗、李光飞 北京航空航天大学
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1