第九讲 msp430液晶控制器和DAC实验04011003 杨阳一、实验目标:(1) 了解MSP430 的段式LCD 资源和特性;(2) 掌握MSP430 的段式LCD 编程以及控制。
(3) 了解DAC 数模转换原理;(4) 学习配置MSP430F6638 的DAC 控制寄存器参数,能够用DAC 产生输出电压,并能输出一定规则的波形(如三角波,正弦波等);(5)了解硬件发声原理,编程实现让DAC 模块驱动扬声器唱歌。
二、实验内容:课堂验收实验:实验内容:①基本:使DAC0输出正弦波频率为300Hz,在LCD上显示频率;②提高:用按键控制DAC0输出正弦波频率为在100Hz—1000Hz循环输出,步进值为100Hz,并在LCD上显示频率;实验原理:1、msp430液晶显示原理MSP430 液晶显示原理 MSP430 的液晶显示有静态、2MUX、3MUX、4MUX 四种显示模式,而最常用还是4MUX 模式。
通俗讲,就是有四个公共端(相当于数码管扫描显示的位选端)、若干个驱动端的模式。
这种模式的最大优点就是能使用最少的引脚提供最多的液晶显示段。
图1 表示了4MUX 显示模式下的公共端与驱动端,其中(a)说明了一个”8”字的四个公共端,(b)说明了两个驱动端,当分别给公共端与驱动端液晶信号时,就显示对应的数码。
在MSP430 系列能驱动液晶显示的单片机中,专门开辟了一片存储空间(LCDMEM1~LCDMEM20)存放要显示的信息,被称为液晶显示缓存,简称液晶显存。
MSP430F6638 共有20 字节单元液晶显存,如果使用4MUX 方式显示,可以显示160 段液晶笔画。
这时,每个显存将对应两个驱动端。
段式LCD 的驱动方法基本上和数码管是不太一样的,数码管只要给电和选通就亮。
但是段式LCD 的驱动是靠两部分组成的:第一部分:不间断的电压脉冲第二部分:选通管脚总体的步骤就是,我们将LCD 的段码先整理好,然后放在一边备用,等到你想显示某个数据的时候,只要将这个8 位的段码直接写入单片机留给你的LCD 寄存器写入端口数组就可以了。
在MSP430F6638 里面也就是 LCDMEM[ ]; [ ]中应该写的是要显示的位,这个位是数码管上面的位置,比如你想显示液晶上面的第2 位数,先不说要显示的内容是什么,这里的位选应该是 LCDMEM[1], 因为是从0 开始的,所以第二位应该是 LCDMEM[1].(从091H 开始------到0A4H 每个地址都可以存一个8 段)然后说显示的内容:2、DAC原理DA 转换,即把数字信号转换为模拟信号输出。
简单的说,就是把数字信号按照一定的参考电压转换成电压值输出。
参考电压控制位DAC12SREFx 有{0,1,2,3}四种模式用于选择DAC12_A 模块的参考电压,分别对应2.5V、2.0V 或1.5V 的内部参考电压、A Vcc 电压和外部参考电压。
数字数据存储在DAC12_0DAT 中,DAC12LSELx 用于锁存数据,控制更新电压的更新输出。
DAC12RES 控制选择输出数据8 位和12 位的分辨率,DAC12IR 和DAC12OG 控制输出电压的倍率。
为了输入输出的准确和稳定,DAC12AMPx 位可根据DAC 输入和输出运放的电流消耗设置稳定时间。
并且,DAC12_A 具有输出矫正功能,通过置位DAC12CALON 位进行自动校正。
在校正之前,需置位DAC12AMPx,校正完成后,DAC12CALON 会自动复位。
在输出应该设置DAC12AMPx 位并进行自动校正。
DAC_A 模块原理实验现象:1、基础部分2、提高部分如图所示,实现了按键切换频率和LCD段码显示。
分析:在实现不同频率时,将一个周期的正弦波分成90个点,每两个点之间的时间间隔=时钟乘以一开始定义在数组里的分频因子,分频因子不同,出来的频率就不同。
关键代码:int sin_table[90];uint sin_data_pr;uint fre_term_pr;int m=1,n;int j;double i;uintfre_term[10]={443,223,147,110,88,73,63,55,4 8,43}; //分频因子if(fre_term_pr<9){fre_term_pr++;m=fre_term_pr+1;}else{fre_term_pr=0;m=fre_term_pr+1;}TA0CCR0=fre_term[fre_term_pr];P2IFG&=~BIT6;if(fre_term_pr==9){LCDMEM[2] = char_gen[1];LCDMEM[3] = char_gen[0];LCDMEM[4] = char_gen[0];LCDMEM[5] = char_gen[0];delay_ms(1000);}else{LCDMEM[2] = 0;LCDMEM[3] = char_gen[m];LCDMEM[4] = char_gen[0];LCDMEM[5] = char_gen[0];delay_ms(1000);}break;case 16://p2.7if(fre_term_pr>0){fre_term_pr--;m=fre_term_pr+1;}else{fre_term_pr=9;m=fre_term_pr+1;}TA0CCR0=fre_term[fre_term_pr]; P2IFG&=~BIT7;if(fre_term_pr==9){LCDMEM[2] = char_gen[1];LCDMEM[3] = char_gen[0];LCDMEM[4] = char_gen[0];LCDMEM[5] = char_gen[0];delay_ms(1000);}else{LCDMEM[2] = 0;LCDMEM[3] = char_gen[m];LCDMEM[4] = char_gen[0];LCDMEM[5] = char_gen[0];delay_ms(1000);}break;}}#pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) {DAC12_0DAT=sin_table[sin_data_pr];sin_data_pr++;if(sin_data_pr==90) sin_data_pr=0;}思考题(1)(1)MSP430系列单片机液晶驱动模块有哪些驱动方法?答:有4种驱动方法:静态、2‐mux、3‐mux、4‐mux(2)MSP430系列单片机液晶驱动模块包括哪些功能结构?答:闪烁存储器、LCD存储器、段输出控制、公共端输出控制、闪烁和显示控制、闪烁分频器、模拟电压多路选择器、LCD偏压生成器等。
(3)MSP430系列单片机液晶驱动模块显示缓存有什么特点?和普通的存储单元有什么不同?答:液晶显示缓存器各个位与液晶的段一一对应。
存储位置位则可以点亮对应的液晶段存储位复位液晶段变暗。
段、公共极输出控制能够自动从显示缓存器读取数据,送出相应信号到液晶玻璃片上。
因为不同器件驱动液晶的段数不同,所以液晶显示缓存器的数量也不一样。
数量越大,驱动能力越强,显示的内容就越多。
(4)常见液晶显示的类型有哪些?答:段式液晶、字符式液晶、图形式液晶(5)MSP430系列单片机液晶驱动模块有哪些特点?答:特点如下:具有显示缓存器所需的SEG、COM信号自动产生多种扫描频率每个闪烁段都有独立的闪烁存储器稳压电荷泵软件实现反向控制显示缓存器可作为一般存储器4种驱动方法思考题(2)(1)简述DAC的主要性能参数。
答:分辨率(n):DAC转换器使用的位数, D/A转换器模拟输出电压可能被分离的等级数。
输入数字量位数越多,分辨率越高。
所以,在实际应用中,常用数字量的位数表示D/A 转换器的分辨率。
转换速度:转换速率(SR)——在大信号工作状态下模拟电压的变化率。
建立时间(t set)——当输入的数字量发生变化时,输出电压变化到相应稳定电压值所需时间。
最短可达0.1μS。
单调性: 转换器的模拟输出值与数字输入值同增同减.偏移误差: 当输入的数字量为0时,DAC输出的模拟量的大小。
温度系数:在输入不变的情况下,输出模拟电压随温度变化产生的变化量。
一般用满刻度输出条件下温度每升高1℃,输出电压变化的百分数作为温度系数。
(2)简述MSP430单片机DAC12模块的特点。
答:• 12位单调输出• 8位或12位电压输出分辨率•可编程的时间对能量的消耗•内部或外部参考电压•二进制或二进制补码形式•具有自校验功能•多路DAC同步更新•可直接用存储器存储(DMA)总结:这次的实验与前几次实验相比,对我们的代码理解修改能力要求更高,让我们初步熟悉了段式LCD的控制与编程,了解了DAC数模转换的原理,以扬声器为例初步学习了硬件发声原理。
更重要的是学会了单片机学习的方法,对类似的问题知道如何着手解决,为将来更深入的学习打下了坚实的基础。