历史上的今天
今天是:2025年04月07日(星期一)
2021年04月07日 | MSP430单片机A/D转换LCD1602&TUBE显示
2021-04-07 来源:eefocus
简介:本文给大家分享了一个MSP430单片机AD转换LCD1602&TUBE显示的源代码。
#include
#define uint unsigned int
#define uchar unsigned char
#define ulint unsigned long int
#define RS BIT0;
#define RW BIT1;
#define EN BIT2;
uint Volt0; //设置电压变量
ulint Volttem0;
unsigned data0=0,data1=0;
uint ADresult0; //设置A/D转换结果
uint a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管不带小数点译码
uint b[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//数码管带小数点译码
uchar c[]={"voltage:"};
uchar *fu="V",*dian=".";
uchar num[]={"0123456789"}; //电压值寻址
int value[4]={0,0,0,0}; //存放电压 (v/1000)
int counter=0; //计数分时显示
void lcd_init(); //初始化LCD
void lcd_wcmd(uchar cmd); //写LCD指令
void lcd_wdata(uchar data); //写LCD数据
void lcd_pos(uchar pos); //设置LCD显示位置
void LED_SH();
void LCD_SH();
void Adcvolt(void) //进行电压转换时ADC12的初始化
{
ADC12CTL0 &=~ENC; //ENC为低电平,设置AD控制寄存器
ADC12CTL0 |=ADC12ON+MSC; //打开ADC12,可以进行AD转换,参考电压3.3V
ADC12CTL1=CSTARTADD_0+CONSEQ_1+SHP;//单通道单次转换,采样频率源自采样定时器
ADC12MCTL0=EOS+INCH_0; //选择模拟输入通道1
ADC12IE |=BIT0; //AD转换中断允许
ADC12CTL0 |=ENC; //转换允许
ADC12CTL0 |=ADC12SC; //开始AD转换
}
void Delay(uint n) //延时函数
{
uint i,j;
for(i=n;i>0;i--)
for(j=100;j>0;j--) ;
}
void lcd_init() //初始化LCD
{
lcd_wcmd(0x38);//16*2显示、5*7显示、8位数据显示
Delay(1);
lcd_wcmd(0x0c);//显示开,关光标
Delay(1);
lcd_wcmd(0x06);//移动光标
Delay(1);
lcd_wcmd(0x01);//清除LCD现实的内容
Delay(1);
}
void lcd_wcmd(uchar cmd) //LCD写指令
{
P3OUT &=~RS;
P3OUT &=~RW;
P3OUT &=~EN;
P4OUT=cmd;
P3OUT |=EN;
Delay(1);
P3OUT &=~EN;
}
void lcd_pos(uchar pos) //设置显示位置
{
lcd_wcmd(pos | 0x80);
}
void lcd_wdata(uchar data)//写入数据到LCD
{
P3OUT |=RS;
P3OUT &=~RW;
P3OUT &=~EN;
P4OUT = data;
P3OUT |=EN;
P3OUT &=~EN;
}
void LED_SH() //LED_show
{
P2OUT |=BIT1+BIT3+BIT4;
P4OUT=0xff;
P5OUT=0x01; //选择第一位数码管
P4OUT=b[value[0]]; //P4口显示采样值的个位
Delay(3);
P4OUT=0xff;
P5OUT=0x02; //选择第二位数码管
P4OUT=a[value[1]];//P4口显示采样值的第一位小数
Delay(3);
P4OUT=0xff;
P5OUT=0x04; //选择第三位数码管
P4OUT=a[value[2]];//P4显示采样值的第二位小数
Delay(3);
P4OUT=0xff;
P5OUT=0x08; //选择第四位数码管
P4OUT=a[value[3]];//P4显示采样值的第三位小数
Delay(3);
P4OUT=0xff;
}
void LCD_SH() //LCD_show
{
uint i;
P2OUT &=~(BIT1+BIT3+BIT4);//turn off 74HC573
lcd_init(); //初始化LCD,以下为LCD显示部分
Delay(1);
lcd_wcmd(0x06); //光标右移
lcd_pos(0); //设置显示位置为第一行的第一个字符
for(i=0;c[i]!='';i++)
{
lcd_wdata(c[i]); //写入数据、显示“Votalge:”
Delay(1);
}
lcd_wdata(num[value[0]]);//写入整数
Delay(1);
lcd_wdata(*dian); //写入小数点“.”
Delay(1);
for(i=1;i<4;i++)
{
lcd_wdata(num[value[i]]);//小如三位小数部分
Delay(1+i*1);
}
lcd_wdata(*fu); //写入、显示字符"V”
Delay(500);
//lcd_wcmd(0x01);
//Delay(10);
//lcd_wcmd(0x04);
//lcd_pos(8);
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
BCSCTL1 &=~XT2OFF; //打开XT2CLK振荡器,ACLK=32768Hz
BCSCTL1 |=SELM_2+SELS; //主时钟MCLK选择8MHz时钟,子时钟SMCLK=8MHz
P4DIR=0xff; //P4口外接数码管
P4OUT=0xff; //熄灭P4口数码管
P3DIR=0xff; //P3口低三位接LCD控制位
P3OUT=0x07;
P5DIR=0xff; //口外接数码管
P5OUT=0xff; //熄灭P5口数码管
P2DIR |=BIT1+BIT3+BIT4;//P2.1 2.3 2.4为锁存器位
P2OUT |=BIT1+BIT3+BIT4;//打开锁存器
P2OUT &=~(BIT1+BIT3+BIT4);//关闭LED的锁存器
P6SEL |=BIT0; //P6.0用于模拟输入通道
TACTL=TASSEL0+TACLR; //TIMERA初始化,时钟源为ACLK=32768Hz
CCTL0=CCIE; //TIMERA中断使能
CCR0=32767; //设置比较值,定时为1S
TACTL |=MC0; //TIMERA,增计数模式,同时启动TIMERA
Adcvolt(); //AD初始化
_EINT(); //总中断使能
while(1)
{
value[0]=Volt0/1000; //数据存入,等待显示
value[1]=Volt0/100;//数据存入,等待显示
value[2]=Volt0/10; //数据存入,等待显示
value[3]=Volt0; //数据存入,等待显示
if(counter<10) LED_SH();//LED/LCD交换显示
else LCD_SH();
}
}
#pragma vector=ADC_VECTOR
__interrupt void ADC(void)//AD转换中断子程序
{
ADresult0=ADC12MEM0; //转换结果寄存器给了变量ADresult0
Volttem0=((long)ADresult0*3300)/4095;//计算实际电压值
Volt0=Volttem0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)//TIMERA中断子程序
{
ADC12CTL0 |=ADC12SC; //每隔一定时间进行一次转换
counter++; //计数用于交换显示
if(counter==20) counter=0;
}
史海拾趣
|
一、线路图: 1、rsense电阻取1欧姆时。充电电流为250MA,0.5欧姆时,电流为520MA,2N6109用TIP42代替,SHUNT电阻为限流电阻,大约1K,其他参数如图。 转绢流后充电机充电电流是原来的1/8还是1/16取决于PGM3脚的接法: Rsense电阻两 ...… 查看全部问答> |
|
本人刚学VB,在写一个串口数据采集大的小软件,刚开始就遇到了问题,以下代码,我在调试时都正常运行,能正确获得返回数据,可是生成exe文件后,程序却没反应,也没有错误信息出现!就是没有数据,求高手帮忙! Public gSend As Boolean &nb ...… 查看全部问答> |
|
quartus功能仿真出现致命错误。 Fatal error: Module: quartus_sim.exe Exception: Access Violat *** Fatal error: Module: quartus_sim.exe Exception: Access Violation Stack Trace: 01a314e6: SDB_DFF_INFO::set_last_clock_value() + 0x34 (tsm_sdb) 01a03144: EDS_ENGINE::propagate() + 0xb0 (TSM_EDS) 01a03321: EDS_ENGINE::propaga ...… 查看全部问答> |
|
LM4871/CSC8002低电压3W功率放大器IC应用电路原理图说明 LM4871/CSC8002 是一个BTL 桥连接的音频功率放大器.它能够在5V 电源电压下给一个3Ω 负载提供THD 小于10%、平均值为3W 输出功率。在关闭模式下电流的典型值为0.6uA. LM4871/CSC8002 是为提供大功率,高保真音频输出而专门设计的.它仅仅需要少量 ...… 查看全部问答> |
|
最近在研究将TPM(安全模块)应用到ARM7上,要在ucosii里添加TPM的驱动,但是现在都是linux下的驱动。有没有大侠可以指点下,可以在ucosii中加TPM的驱动吗?… 查看全部问答> |




