msp430f169的ad采样及lcd12864的显示程序修改

qq_39738646 2017-08-08 11:37:28
用万用表测电压显示的挺正常的,但是lcd上就是没有办法显示。。。求大神帮忙
#ifndef shiyanh
#define shiyanh
#include "msp430.h"
#define uchar unsigned char
#define uint unsigned int
static double data;//用来存储ADC12MEM中的数据
/*=============================
#define SID P2.1;
#define CLCLK P2.0;
接线:LCD12864的5脚接P2.1
LCD12864的6脚接P2.0
LCD12864的4引脚直接接VCC
电位器中间接P6.0
==============================*/
#define SID_1 P2OUT|=0x02;
#define SID_0 P2OUT&=~0x02;
#define CLK_1 P2OUT|=0x01;
#define CLK_0 P2OUT&=~0x01;
#define nop _NOP();
void delay(uchar z);
void W_8bits(uchar W_bits);
void W_byte(uchar rw,uchar rs,uchar W_data);
void lcdinit();
void W_str(uchar x,uchar y,uchar *s);
void write_com(uchar x);
void write_data(uchar x);
void write_string(uchar x,uchar y,uchar *s);
void initClock(void);
void initADC12(void);
void SendDouble(double data);
#endif




#include "msp430.h"
#include "shiyan.h"
#define uchar unsigned char
#define uint unsigned int
static double data;//用来存储ADC12MEM中的数据
char a,b,c=0; //用来存储将要显示在LCD上的各位数据
/*=============================
#define SID P2.1;
#define CLCLK P2.0;
接线:LCD12864的5脚接P2.1
LCD12864的6脚接P2.0
LCD12864的4引脚直接接VCC
==============================*/
#define SID_1 P2OUT|=0x02;
#define SID_0 P2OUT&=~0x02;
#define CLK_1 P2OUT|=0x01;
#define CLK_0 P2OUT&=~0x01;
#define nop _NOP();
void delay(uchar z);
void W_8bits(uchar W_bits);
void W_byte(uchar rw,uchar rs,uchar W_data);
void lcdinit();
void W_str(uchar x,uchar y,uchar *s);
void write_com(uchar x);
void write_data(uchar x);
void write_string(uchar x,uchar y,uchar *s);
void initClock(void);
void initADC12();
void SendDouble(double data);
//初始化时钟
void initClock(void)
{
BCSCTL1=RSEL2+RSEL1+RSEL0+DIVA_1;//XT2开启 LFXT1工作在低频模式 ACLK 2分频( 注释:原来的人没做分频,我担心频率过高) 最高的标称频率
DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
do{
IFG1&=~OFIFG;//清除振荡器失效标志
for(unsigned int i=255;i>0;i--);
}while(IFG1&OFIFG);//判断XT2是否起振
BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}

void W_8bits(uchar W_bits)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=W_bits;
temp<<=i;
if((temp&0x80)==0)
{
SID_0;
nop;
CLK_1;
nop;
nop;
CLK_0;
nop;
SID_0;
}
else
{
SID_1;
nop;
CLK_1;
nop;
nop;
CLK_0;
nop;
SID_0;
}
}
}
/*
rw=1 则表示读出
rw=0 则表示输入
rs=1 则表示写数据
rs=0 则表示写命令
W_byte(0,0,x)写命令x;
W_byte(0,1,y)写数据y;
*/
void W_byte(uchar rw,uchar rs,uchar W_data)
{
uchar H_data,L_data,s_id=0xf8;
if(rw==0)
{
s_id&=~0x04;
}
else
{
s_id|=0x04;
}
if(rs==0)
{
s_id&=~0x02;
}
else
{
s_id|=0x02;
}
H_data=W_data;
H_data&=0xf0;
L_data=W_data;
L_data&=0x0f;
L_data<<=4;

W_8bits(s_id);
W_8bits(H_data);
W_8bits(L_data);

}
void lcdinit()
{

delay(10);
W_byte(0,0,0x38);
delay(5);
W_byte(0,0,0x38);
delay(5);
W_byte(0,0,0x0c);
delay(5);
W_byte(0,0,0x01);
delay(5);
W_byte(0,0,0x02);
delay(5);
W_byte(0,0,0x80);
delay(5);
}
/*很神奇的一个函数,可以输入字符串,不管是汉字还是字母表*/
/*
x代表偏移量
y代表第几行
*S是字符串的指针
*/
void W_str(uchar x,uchar y,uchar *s)
{
switch(y)
{
case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
default:W_byte(0,0,0x80+x);//否则都当成第一行处理
}
while(*s)
{
W_byte(0,1,*s);
s++;
}
}
void write_com(uchar x)
{
W_byte(0,0,x);
}
void write_data(uchar x)
{
W_byte(0,1,x);
}
void write_string(uchar x,uchar y,uchar *s)
{
switch(y)
{
case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
default:W_byte(0,0,0x80+x);//否则都当成第一行处理
}
while(*s)
{
W_byte(0,1,*s);
s++;
}
}




//ADC12采样初始化,并打开中断子程序计算采样值的大小
void initADC12()
{
P6SEL=0X01;//P6.0口作为模拟输入
ADC12IE=0X01; //开放中断ADC12IFG.0
ADC12CTL0=ADC12ON+SHT0_4+REFON+REF2_5V;//打开ADC转换的核,采用内部参考电压2.5v;
ADC12CTL1=SHP; //信号源内部触发
ADC12MCTL0=SREF_1;//使用内部2.5V作为参考电压
ADC12CTL0 |=ENC; //开放使能
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR()
{
data=ADC12MEM0*2.5/4096; //data为全局变量
write_com(0x02);
_BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR)
}

void SendDouble(double data)
{
data*=100;
int temp=(int)data;
a=temp/100;//考虑到由于内部参考电压的限制,且仅考虑两位小数的情况
b=(temp%100)/10;
c=(temp%10);
write_data(a);
write_data('.');
write_data(b);
write_data(c);
write_data(' ');
write_data('V');
}




#include "msp430.h"
#include "shiyan.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
double temp=0.0;
initClock();//初始化时钟
initADC12();
P2DIR=0x03;//就是少了这条指令,导致研究好久!!!
// CS_0;
// P2OUT|=~BIT2;
CLK_0;
SID_0;
lcdinit();
while(1)
{
ADC12CTL0 |= ADC12SC; // Sampling open
_BIS_SR(CPUOFF + GIE); // LPM0, ADC12_ISR will force exit
if(temp!=data)
{
temp=data;
SendDouble(data);
}
}
return 0;
}
...全文
238 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
328254178Msp430F149.rar AD_DA.rar e96e317f-d9ab-41e5-b87f-ebc3f6131c4b.zip MSP430-149单片机应用实例(USB实例).rar MSP430-F149对应的液晶程序(描述详细,易于调用).rar MSP430F149 AD转换C程序.rar MSP430F149 C语言驱动DS18B20.zip MSP430F149 GSM基本控制,初始化接收短息,解读短信.rar MSP430F149+1602数码显示和实时时钟.rar MSP430F149+DS1302+UART程序可以用.rar MSP430F149,IAR,ADC采样之后对太阳点光源进行跟踪.rar MSP430F149--485串行通信.rar MSP430F149-SHT15传感器例程(,随时调用,含注释) (1).rar MSP430F149-SHT15传感器例程(,随时调用,含注释).rar MSP430F149下的s级别,us级别,ms级别延时.rar MSP430F149单片机与RF2401硬件SPI无线通信 (1).zip MSP430F149单片机与RF2401硬件SPI无线通信.zip MSP430F149单片机定时器A的PWM输出程序.rar MSP430F149单片机对1602液晶进行的简单测试.rar MSP430F149单片机对1604液晶进行的简单操作.rar MSP430F149单片机对PS2键盘的控制程序和源码.rar MSP430F149单片机对继电器的控制程序和源码.rar MSP430F149单片机控制LED全彩显示屏的某一行列数据传输控制显示程序.rar MSP430F149单片机模拟IIC和DS18B20通信进行测试温度代码.rar MSP430F149单片机的Flash程序.rar MSP430F149可以通过串口显示温度传感器的数值.rar MSP430F149开发板例程(控制8个LED闪烁).rar MSP430f149控制LCD12864显示汉字、字母.zip MSP430F149温度测量.zip MSP430F149的无线模块24L01程序.rar MSP430F149跑ADC和USB好用的代码.rar MSP430F149通过SPI接口控制ADS1216.zip MSP430x14x控制SED1335驱动320×240屏.rar MSP430x14x系列单片机实现了对EEPROM的读写测试.rar MSP430内置温度传感器的C语言程序.zip MSP430单片机 串口像PC发送数据.rar MSP43F149的USB测试程序.rar mulu.txt RF24L01-AD.rar RF24L01-MCU-PC通信例程.rar RF24L01-PC-MCU通信例程.rar RF24L01无线温度例程.rar RF24L01遥控例程.rar 基于MSP430F149为主芯片下的红外线解码资料源程序.zip 基于MSP430F149单片机中看门狗电路的中断实验.zip 基于MSP430F149单片机的1602程序代码.zip 基于MSP430F149单片机的nRF24L01无线通信程序.rar 基于MSP430F149单片机的串口0驱动程序.rar 基于MSP430F149单片机的温湿度传感器SHT1X驱动程序.rar 基于MSP430F149的12864的显示图片.rar 基于MSP430F149的数字钟源代码(以1602LCD液晶显示).rar 基于MSP430F149的触摸手写程序.zip 展示了MSP430F14x单片机的AD操作.rar 德州仪器MSP430F1449-F169LCD12864测试程序 (1).rar 德州仪器MSP430F1449-F169LCD12864测试程序.rar 德州仪器MSP430F149-F169初学者常用代码.rar 演示了如何操作MSP430F149单片机的DMA操作.rar 演示了如何操作MSP430F149的I2C功能.rar

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧