1、 前言 由于这是本人第一次制作电子文档类的使用说明,我对一些截图软件, 文档的排版都不熟悉,可能制作的东西显得并不整洁和清晰。 更由于本人所在的学校国家连技校学历也不承认,可以说是个冒牌的技 校生,所以本人水平实在有限,文中一些问题的说明可能本身就有错误! 还请大家理解。 本人单片机,51,AVR,C 语言纯属自学,水平更是没的谈,所以大家 不要对本文档的深度有太高的期望值,望见谅 提问的艺术 经常在学校有些人问我问题,有的人提的问题,我会思考回答。而 有些人的问题,我则不屑回答!原因有二:其一这个问题他根本就没 对问题分析过,现在找个人带劳。其二:分析了问题,但是资料一个 也没看,甚至就是书
2、上有的参考!直接来问! 啊 救命啊,遇 到这样的事情,我直接让其回去看书,或者给他一个地方让他自己找 资料看去。 不是我傲慢而是我根本就无法回答,象怎么将十进制转为十六进制 这样的愚蠢问题。书上有的问题,不好好看书 直接出来问人 。怎么 能让人不反感!所以这样的问题 我拒绝! 回想起来上二年级了,除了正常的上课不懂的问题,我一定要问外, 别的问题我还真没问一个。 因为学校有时要参加省里或者什么地方 的比赛,让谁去参加 竞争很激烈,但是我不怕,因为我从来不向辅 导老师提问,从来不提一些基础问题,自己找答案。这样别人就无法 知道你的深浅,就会器重你,相反一天到晚问这个问哪个的人,说明 根本就没有真
3、才实学,问的问题越多,暴露的问题越多,最后你只能 淘汰出局。可以想象隐藏自己是多么的必要。自己不知道的东西,可 以自己不知道,但是不能让别人知道你不知道。 呵呵,不说了。再说就要到伊拉克了。本来写了一部分就感觉到 很疲倦。但是想到“古道热肠”网友要送我个 P3 听听,想到还有这 么多的网友的期盼,我就有了精神!继续写! 通过三个电阻的分压来达到衰减,输入信号的作用。继电器 B,C,D 起选 择衰减倍数的作用。A 是选择 DC,或者 AC。 下图中 V2 和 V3 是起一个正五伏和负五伏的作用,是为了给 AD603 供电, 图中所示接法可提供 040DB 的增益 根据公式 VG 为 0 时的增益
4、为 20,查表倍数为 10。V1=0.1V 则输出应该 为 1V。 看到这里,我想大家明白了 AD603 的工作原理 ,既通过 TLV5618 来改变 B 点的电压来改变 VG 进而改变 AD6 03 的增益。 解释下:通过 TLV5618 的输出电压经过 NE5532 组成的反向器把正相电压 转换为等比例的负电压,这个负压接到 AD8065 的反向输入端,大家可以 通过这个电压来确定 AD8065 的输出,反映到屏幕上就应该是波形的中线 位置。如果你的东西显示的波形偏下你可以增大 TLV5618 的 B 端输出来调 节。 TL431 内部有一个 2,5V 的基准源,当超过这个值时,TL431
5、 电流迅速增大, 使其限制在电压范围内。 也许有的同志要问了,为什么用十二位的,用八为不是可以省成本? 如果这个 DA 转换只用到 NE5532 是可以的,但是用到 AD603 绝对不行, 因为电压的一点误差将引起 AD603 的很大误差。很多人用 AD603 自激也是 因为这两点电压要求太苛刻,线路干扰引起的。所以为了我们的东西性能 好点,这个就不省了。 这个元件的用的好与否,关系全局。 #include #include void intda() /初始化 #define DA_CE PORTC.5 /定义功能引脚 使能端 #define DA_CLK PORTC.6 /时钟引脚 #def
6、ine DA_DAT PORTC.7 /数据引脚 DDRC|=0XE0; /定义为输出 DA_CE=1; /开始前 全部置高 DA_DAT=1; DA_CLK=1; void spi_out_a(unsigned int j,unsigned char q) unsigned char u; j=j/由于只有十二位,所以把前面的数去掉 if(q=1) /判断是给 输出 A的数据,还是 B 的数据 j=j+0x8000; DA_CE=1; DA_DAT=1; DA_CLK=1; delay_us(1);/延时 DA_CE=0;/使能底了,现在可以写数据了 for(u=0;u16; dds1=dd
7、s12; dds2=dds2 dds2=dds2|0x4000; dds1=dds1 dds1=dds1|0x4000; write_2byte(0x2028); write_2byte(dds1); write_2byte(dds2); 151的的输出逻辑图 由于使能端已经在电路中接低电平,所以才程序中不用考虑。图中: 比如,C,B 端是低电平 A 点是高 对应二进制为 1,所以选择的是 D1 端 的信号到 Y。(其实写这个很没必要,如果这个也看不懂。其实就没必要 看下去了,趁早换行,免得耽误你的前程:) 由于我的失误,本来这个错误可以避免。现在才补上来,大家看图 本来这个图早就截了,我也想
8、到这个问题,也仿真了,建议大家去掉这个 电容,但是仿真并没有发现问题。也就放弃了。后有网友提出有这一问题, 分析还是通不过,所以再次仿真,发现 BUG。可以说很严重!本来上一版 是建议大家去掉这个电容,这次是坚决除掉这个出力不讨好的家伙! 如果不去掉也就是说每次,开机。或者不输入信号你的显示屏也会有波 形。去不去掉不用我说了吧 将高速数模转换器 ADS830E 的工作简单介绍一下,由图可知每个时钟周期 进行一次数模转换,所以采样速率就是时钟频率,故可以很方便的通过控 制采样时钟来控制采样频率,当前输出的采样数据是 4 个时钟周期以前采 样电压的值,也就是说从采样到输出有 4 个时钟周期的延迟,
9、这对我们所 要做的电路并不重要,所以我们可以简单的理解为输入一个时钟脉冲转换 一次,时钟的脉冲的下降沿输出数据就行,应用非常方便。还有一点就是 ADS830E 的输入电压幅度是可以编程控制的,11 脚(RSEL)为控制引脚, 当 11 脚置高电平时,ADS830E 的输入电压范围是 1.5V3.5V,即 2Vpp。当 11 脚置低电平时,输入电压范围是 2V3V,即 1Vpp。 为什么说冒险,因为数据在过了 T1 的时候,刚好处于数据的变化区,这 个数据是不准的。由于 7204 是上升沿读入数据,(即 7204 的 2 脚 W)他 通过一个与门,将时钟信号和单片机的信号相与,如果同为高,则写入
10、数 据,可是这个与门也耽误时间,这样数据的安全就受到了威胁。 是 ns, 改图不方便,见 谅 关于 LCD的低闪烁来讲,闪烁并不是 把数据在某一点上写本身,而是在清屏与写屏 间的明显闪烁,或者就是按键处理中的闪烁。 这个电路本身按键采用的是中断处理只要中断 时间处理的的够快速就可以避免。但是在这个 电路中中断处理起来就不是那么理想,因为在 按键后还要改变屏幕上的东西,这个就耗时间 了,如果在波形显示中来了按键,屏幕当然会 一卡,解决的方法有点类,把长的任务,分为 若干个小任务。比如在按键后要显示五个字母, 那么 可以采用标记,写一个字母后返回主任 务 连续五次,把一个卡,变为轻微的闪。还 有就
11、是在刷屏的时候不一定表格线每刷完一次 屏就重新画一次,可以是刷了几屏后清了再写 一次。 还有一个地方就是,7204 读取数据到单片 机,所耽搁的时间。我认为 7204的数据是很 快写满的,可以在刷频的间隙抽空把数据读出 来,少量多次 。 以上只是我的一些浅见,本来不想将这个 的。因为本身能力不足啊,纯属班门弄斧。 下面来写LCD的控制驱动 void WMLCDCOM(unsigned char data_1,unsigned char data_2) RS=0; PORTF=data_1; PORTA=data_2; WR=0; WR=1; void WMLCDDATA(unsigned ch
12、ar data_1,unsigned char data_2) RS=1; /就是这个不一样,一个为高一个为低就是这个不一样,一个为高一个为低 PORTF=data_1; PORTA=data_2; WR=0; WR=1; 下面的这个函数是,定位显示的开始地址,下面的这个函数是,定位显示的开始地址,starty starty 是是Y Y 轴的地址轴的地址。 StartXStartX 是是X X轴的地址。写上这个地址以后后面再加一个颜色的数值轴的地址。写上这个地址以后后面再加一个颜色的数值, 就可以在该点显示和你写的颜色对应的一个点。就可以在该点显示和你写的颜色对应的一个点。 void Set_
13、ramaddr(unsigned int StartY, unsigned int StartX) PORTF=0X00; RS=0; PORTA=0x02; WR=0; WR=1; RS=1; PORTA=0x00; WR=0; WR=1; RS=0; PORTA=0x03; WR=0; WR=1; RS=1; PORTA=StartY; WR=0; WR=1; RS=0; PORTA=0x06; WR=0; WR=1; RS=1; PORTA=StartX8; WR=0; WR=1; RS=0; PORTA=0x07; WR=0; WR=1; RS=1; PORTA=StartX; WR=
14、0; WR=1; RS=0; PORTA=0x22; WR=0; WR=1; 这个是一个将全屏刷成红色的函数这个是一个将全屏刷成红色的函数 void quanbu(unsigned int color) unsigned int X, Y; lcd_display_area(0,0, 319, 239); for(X = 0; X 319; X+) for(Y = 0; Y 239; Y+) WMLCDDATA(0Xf8, 0X00);/里面的数值,就是选择要显示的颜里面的数值,就是选择要显示的颜 色色 这种文档其实看的人极少,也就是还不到这种文档其实看的人极少,也就是还不到 半百的买了套件的
15、人。最后一部分如果要半百的买了套件的人。最后一部分如果要 想写很详细的话,要花想写很详细的话,要花 N N长时间,也不一长时间,也不一 定解释的透。这样的话,在掌握驱动的情定解释的透。这样的话,在掌握驱动的情 况下,还不如让大家自己去理解。 况下,还不如让大家自己去理解。 其实退一步想,能看懂前面的部分后一 其实退一步想,能看懂前面的部分后一 部分,显示的部分也不是难事,所以我写部分,显示的部分也不是难事,所以我写 了最简单的驱动。了最简单的驱动。 在这里我要谢谢 “ 在这里我要谢谢 “ 888888888888 ”888888888888 ” 和“和“sunsun“sunsun“其中要特别感谢“其中要特别感谢“gdrc gdrc 古道古道 热肠”对我的支持!还有支持我的热心网热肠”对我的支持!还有支持我的热心网 友们。感谢本网站,友们。感谢本网站,W 为大家提供了这么好的交流平台。感谢魏为大家提供了这么好的交流平台。感谢魏 同学的开源精神,让大家有了一次做示波同学的开源精神,让大家有了一次做示波 器的体验。器的体验。 谢谢大家 谢谢大家