您的位置 首页 传感器

MSP430单片机对诺基亚5110液晶显示的驱动

MSP430单片机对诺基亚5110液晶显示的驱动-本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。

本程序选用的是八路ADC单次收集的形式,依据装备,在单次的形式下转化完成后ADC12SC会主动复位,因而需求在循环中进行ADC12CTL0 |= ADC12SC;操作,而假如装备成接连收集的形式,只需求在程序开端将ADC12SC置位一次就能够,可是就需求留意当进入中止后假如不手动制止中止会一向停留在循环中,因而在收集到需求的数据后需求将ADC封闭或许中止使能制止才干从头回到主函数,这一点需求留意。

八路单次收集的程序如下:

八路AD多路单次收集诺基亚5110液晶显现

收集形式:多路单次

#include

#include“LCD5110.h”

#defineuintunsignedint

#defineucharunsignedchar

unsignedcharad0[]=“1:0.0V”;

unsignedcharad1[]=“2:0.0V”;

unsignedcharad2[]=“3:0.0V”;

unsignedcharad3[]=“4:0.0V”;

unsignedcharad4[]=“5:0.0V”;

unsignedcharad5[]=“6:0.0V”;

unsignedcharad6[]=“7:0.0V”;

unsignedcharad7[]=“8:0.0V”;

ucharflag=1;

uinttemp0,temp1,temp2,temp3,temp4,temp5,temp6,temp7;

voidInit_Clk()

{

uchari;

BCSCTL1&=~XT2OFF;//翻开XT振动器

do

{

IFG1&=~OFIFG;//铲除振动过错标志

for(i=0;i《100;i++)

_NOP();//延时等候

}

while((IFG1&OFIFG)!=0);//假如标志为1持续循环等候

IFG1&=~OFIFG;

BCSCTL2|=SELM1+SELS;//MCLK8MandSMCLK1M

}

voidInit_ADC()

{

P6SEL|=0XFF;//信号收集端口挑选第二功用

ADC12CTL0=ADC12ON+SHT0_8+MSC;//翻开ADC+设置采样时刻

ADC12CTL1=SHP+CONSEQ_1;//运用采样时序电路信号+多路单次形式

//上面的寄存器装备采样坚持触发源挑选时ADC12SC,收集信号运用采样时序电路发生的信号

//转化形式为多路单次复转化上面的设置必须在ENC=0的情况下设置

//设置每个通道的输入端口和参阅电压,参阅电压默以为AVCC3.3V

ADC12MCTL0=INCH_0;

ADC12MCTL1=INCH_1;

ADC12MCTL2=INCH_2;

ADC12MCTL3=INCH_3;

ADC12MCTL4=INCH_4;

ADC12MCTL5=INCH_5;

ADC12MCTL6=INCH_10;

ADC12MCTL7=INCH_11+EOS;//最终一个通道

ADC12IE=BIT7;//最终一个通道转化完成后使能ADC中止

ADC12CTL0|=ENC;//使能转化

}

/*******************************************

函数称号:Trans_val

功用:将16进制ADC转化数据改换成三位10进制

实在的模仿电压数据,并在液晶上显现

参数:Hex_Val–16进制数据

n–改换时的分母等于2的n次方

返回值:无

********************************************/

voidTrans_val(ucharptr[6],uintHex_Val)

{

unsignedlongcaltmp;

uintCurr_Volt;

caltmp=Hex_Val;

caltmp=(caltmp《《5)+Hex_Val;//caltmp=Hex_Val*3

Curr_Volt=caltmp》》12;//Curr_Volt=caltmp/2^n

//参阅电压为3.3V,所以核算公式应该为Hex_val*3.3/2^n

//乘除核算经过移位来进行能够有用的进步程序运转功率

ptr[2]=(Curr_Volt/10)+0x30;//个位

ptr[4]=(Curr_Volt%10)+0x30;//小数位

}

voidmain()

{

Init_Clk();

Init_ADC();

WDTCTL=WDTPW+WDTHOLD;

LCD_init();

LCD_showsh(0,0,“电压收集:”);

_EINT();//敞开大局中止

P5DIR|=BIT5;

P3OUT|=~BIT5;

while(1)

{

ADC12CTL0|=ADC12SC;

LCD_prints(0,2,ad0);

LCD_prints(8,2,ad1);

LCD_prints(0,3,ad2);

LCD_prints(8,3,ad3);

LCD_prints(0,4,ad4);

LCD_prints(8,4,ad5);

LCD_prints(0,5,ad6);

LCD_prints(8,5,ad7);

}

}

/*******************************************

函数称号:ADC12ISR

功用:ADC中止服务函数

参数:无

返回值:无

********************************************/

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

{

temp0=ADC12MEM0;

Trans_val(ad0,temp0);

temp1=ADC12MEM1;

Trans_val(ad1,temp1);

temp2=ADC12MEM2;

Trans_val(ad2,temp2);

temp3=ADC12MEM3;

Trans_val(ad3,temp3);

temp4=ADC12MEM4;

Trans_val(ad4,temp4);

temp5=ADC12MEM5;

Trans_val(ad5,temp5);

temp6=ADC12MEM6;

Trans_val(ad6,temp6);

temp7 = ADC12MEM7;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/345090.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部