1、单片机原理及应用第九讲MSP430单片机液晶控制器和ADC单片机原理及应用第九讲 MSP430单片机液晶控制器和ADC报告人: 实验内容实验一:段码LCD循环显示0到6实验二:DAC输出正弦波实验三:基础:使DAC0输出正弦波频率为300Hz,在LCD上显示频率。提高:用按键控制DAC0输出正弦波频率为在100Hz1000Hz循环输出,步进值为100Hz,并在LCD上显示频率。实验步骤步骤:(1) 将PC 和板载仿真器通过USB 线相连;(2) 打开CCS 集成开发工具,选择样例工程或自己新建一个工程,修改代码;(3) 选择对该工程进行编译链接,生成.out 文件。然后选择,将程序下载到实验板
2、中。程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。再按下实验板的复位键,运行程序。(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议上电运行程序)。关键代码:实验一:int main() int i,j; WDTCTL = WDTPW + WDTHOLD;/ Stop WDT Init_TS3A5017DR(); / Configure TS3A5017DR IN1 and IN2 Init_lcd(); / LCD初始化 Backlight_Enable(); / 打开背光 Lcd
3、Go(1); / 打开液晶模块 LCD_Clear(); / 清屏 while(1) for (i=0; i6; i+) / Display 0123456 for(j=0;j6;j+) LCDMEMj = char_geni; delay_ms(1000); 实验二:#include #include #define PI 3.1415926int sin_table360;int *sin_data_pr;double i=0;int j;void main(void) WDTCTL = WDT_MDLY_0_064; / WDT 61us interval timer SFRIE1 =
4、WDTIE; / Enable WDT interrupt for(j=0;j= &sin_table360) sin_data_pr = &sin_table0; / Positive ramp DAC12_0DAT &= 0xFFF; / Modulo 4096 #pragma vector=WDT_VECTOR_interrupt void watchdog_timer (void) _bic_SR_register_on_exit(CPUOFF); / Clear LPM0 bits from 0(SR)实验三:基础:int main(void) WDTCTL = WDT_MDLY_0
5、_064; / WDT 61us interval timer Init_TS3A5017DR(); / Configure TS3A5017DR IN1 and IN2 Init_lcd(); / LCD初始化 Backlight_Enable(); / 打开背光 LcdGo(1); / 打开液晶模块 LCD_Clear(); / 清屏 LCDMEM0 = char_gen3; LCDMEM1 = char_gen0; LCDMEM2 = char_gen0; SFRIE1 = WDTIE; / Enable WDT interrupt for(j=0;j= &sin_table52) si
6、n_data_pr = &sin_table0; / Positive ramp DAC12_0DAT &= 0xFFF; / Modulo 4096 #pragma vector=WDT_VECTOR_interrupt void watchdog_timer (void) _bic_SR_register_on_exit(CPUOFF); / Clear LPM0 bits from 0(SR)提高:#define circnt100 1388#define circnt200 694#define circnt300 462#define circnt400 348#define cir
7、cnt500 278#define circnt600 232#define circnt700 198#define circnt800 174#define circnt900 154#define circnt1000 138int sin_table180;int *sin_data_pr;double i=0;int j;const int cnt_table = circnt100,circnt200,circnt300,circnt400,circnt500,circnt600,circnt700,circnt800,circnt900,circnt1000;int cnt_fl
8、g = 0;void SetVcoreUp (unsigned int);void main(void) WDTCTL = WDTPW + WDTHOLD; / close watchdog /-p2.6- P2REN |= BIT6; / Enable P2.6 internal resistance P2OUT |= BIT6; / Set P2.6 as pullUp resistance P2IES |= BIT6; / P2.6 Hi/Lo edge P2IFG &= BIT6; / P2.6 IFG cleared P2IE |= BIT6; / P P2.6 interrupt
9、enabled /*P2REN |= BIT7; / Enable P2.6 internal resistance P2OUT |= BIT7; / Set P2.6 as pullUp resistance P2IES |= BIT7; / P2.6 Hi/Lo edge P2IFG &= BIT7; / P2.6 IFG cleared P2IE |= BIT7; / P P2.6 interrupt enabled*/ /-enable LCD- Init_TS3A5017DR(); / Configure TS3A5017DR IN1 and IN2 Init_lcd(); / LC
10、D初始化 Backlight_Enable(); / 打开背光 LcdGo(1); / 打开液晶模块 LCD_Clear(); / 清屏 LCDMEM5 = char_gen0; LCDMEM4 = char_gen0; LCDMEM3 = char_gen1; /-config sine list- for(j=0;j= &sin_table180) sin_data_pr = &sin_table0; / Positive ramp DAC12_0DAT &= 0xFFF; / Modulo 4096 void SetVcoreUp (unsigned int level) PMMCTL0
11、_H = PMMPW_H; / Open PMM registers for write / Set SVS/SVM high side new level SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; / Set SVM low side to new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; while (PMMIFG & SVSMLDLYIFG) = 0); / Wait till SVM is settled PMMIFG &= (SVMLV
12、LRIFG + SVMLIFG); / Clear already set flags PMMCTL0_L = PMMCOREV0 * level; / Set VCore to new level if (PMMIFG & SVMLIFG) while (PMMIFG & SVMLVLRIFG) = 0); / Wait till new level reached / Set SVS/SVM low side to new level SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; / Lock PMM re
13、gisters for write access PMMCTL0_H = 0x00;/-timerA interruption-#pragma vector=TIMER0_A0_VECTOR_interrupt void TIMER0_A0_ISR(void) _bic_SR_register_on_exit(CPUOFF);/-bottom interruption-#pragma vector=PORT2_VECTOR_interrupt void Port_2(void) _bic_SR_register_on_exit(CPUOFF); cnt_flg+; if (cnt_flg =
14、10) cnt_flg = 0; LCD_Clear(); / 清屏 LCDMEM5 = char_gen0; LCDMEM4 = char_gen0; if (cnt_flg = 9) LCDMEM3 = char_gen0; LCDMEM2 = char_gen1; else LCDMEM3 = char_gencnt_flg + 1; TA0CCR0 = cnt_tablecnt_flg; P2IFG &= BIT6; _bis_SR_register(CPUOFF + GIE);实验现象分析:实验一:LCD显示屏上循环显示0到6,每次显示都为6个相同的数字,现象对应的代码为:实验二:实
15、验板上扬声器放出周期为64us*360=0.023s的正弦波信号。实验三:基础:用示波器测量P7.6信号,测出信号频率为300HZ左右,LCD面板上显示为300。提高:按下按键,信号频率按要求改变,同时LCD也显示出信号频率对应值。思考题1、MSP430系列单片机液晶驱动模块有哪些驱动方法?答:4种驱动方法:静态2mux3mux4mux2、MSP430系列单片机液晶驱动模块包括哪些功能结构?答:功能结构:具有显示缓存器所需的SEG、COM信号自动产生多种扫描频率每个闪烁段都有独立的闪烁存储器稳压电荷泵软件实现反向控制显示缓存器可作为一般存储器3、MSP430系列单片机液晶驱动模块显示缓存有什么
16、特点?和普通的存储单元有什么不同?答:特点:液晶显示缓存器各个位与液晶的段一一对应。存储位置位则可以点亮对应的液晶段,存储位复位液晶段变暗。段、公共极输出控制能够自动从显示缓存器读取数据,送出相应信号到液晶玻璃片上。因为不同器件驱动液晶的段数不同,所以液晶显示缓存器的数量也不一样。数量越大,驱动能力越强,显示的内容就越多。不同:显示缓存器可作为一般存储器,但一般存储单元存储位置位不可以点亮液晶段。4、常见液晶显示的类型有哪些?答:段式液晶字符式液晶图形式液晶5、MSP430系列单片机液晶驱动模块有哪些特点?答:具有显示缓存器所需的SEG、COM信号自动产生多种扫描频率每个闪烁段都有独立的闪烁存
17、储器稳压电荷泵软件实现反向控制显示缓存器可作为一般存储器4种驱动方法 静态 2mux 3mux 4mux6、简述DAC的主要性能参数。答:分辨率(n):DAC转换器使用的位数, D/A转换器模拟输出电压可能被分离的等级数。输入数字量位数越多,分辨率越高。所以,在实际应用中,常用数字量的位数表示D/A转换器的分辨率。转换速度:转换速率(SR)在大信号工作状态下模拟电压的变化率。建立时间(tset)当输入的数字量发生变化时,输出电压变化到相应稳定电压值所需时间。最短可达0.1S。单调性:转换器的模拟输出值与数字输入值同增同减.偏移误差:当输入的数字量为0时,DAC输出的模拟量的大小。温度系数:在输入不变的情况下,输出模拟电压随温度变化产生的变化量。一般用满刻度输出条件下温度每升高1,输出电压变化的百分数作为温度系数。7、简述MSP430单片机DAC12模块的特点。答:12 位单调输出8位或12位电压输出分辨率可编程的时间对能量的消耗内部或外部参考电压二进制或二进制补码形式具有自校验功能多路DAC同步更新可直接用存储器存储(DMA)实验中遇到的问题无
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1