msp430f149 1602 驱动程序

#include<msp430x14x.h>#defineucharunsignedchar#defineuintunsignedintchare;intjingdu,i... #include <msp430x14x.h>

#define uchar unsigned char
#define uint unsigned int
char e;int jingdu,i=0,ge,shi,bai,qian;float z;
char str[16];
void delay()
{
int i,j;
for(i=0; i<=1; i++)
for(j=0; j<=20; j++)
;
}
void enable(uchar del)
{

P3OUT=0X00;delay();P4OUT = del;
delay();
P3OUT=BIT2;
delay();
}

void write(uchar del)
{

P3OUT=BIT0;delay();P4OUT =del;
delay();
P3OUT|=BIT2;
delay();
}
void L1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0f);
enable(0x06);

}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
write(sign);
}
void AD()
{
ADC12CTL0 = ADC12ON+SHT0_5+MSC; // 打开ADC,设置采样时间

/*选择内部参考电压源*/
ADC12CTL0|= REFON+REF2_5V;
ADC12MCTL0|=SREF_1;

ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC;
}
/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
while(1)
{
if(*p == '\0') break;
write(*p);
p++;
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void LCD()
{
z=z*3.3/4095;
z*=1000;
qian=z/1000;
bai=(z-qian*1000)/100;
shi=(z-qian*1000-bai*100);
ge=z-qian*1000-bai*100-shi*10;

L1602_char(2,4,qian+48);
L1602_char(2,5,'.');
L1602_char(2,6,bai+48);

L1602_char(2,7,shi+48);
L1602_char(2,8,ge+48);
L1602_char(2,9,' ');
L1602_char(2,10,'v');
}

void main()
{
WDTCTL=WDTPW+WDTHOLD;
P4DIR=0XFF;
P4OUT=0X00;
P3DIR=0X0F;
P3OUT=0X00;
P6SEL=0X01;
P6DIR=0X00;

e=3;
L1602_init();
L1602_string(1,3,"Voltage= ");
AD();
z=0x000;
_EINT();
ADC12CTL0|=ADC12SC;
while(1){

LCD();
} }

/*转换中断服务函数*/

#pragma vector=ADC_VECTOR
__interrupt void conversion()
{
int buffer[3];

static int index=0;
buffer[index++]=ADC12MEM0;
if(index==31)
{
for(;index>0;index--)
z+=buffer[index];
z/=32.0;

}
}
展开
 我来答
12...9@qq.com
2012-04-20
知道答主
回答量:31
采纳率:0%
帮助的人:19.3万
展开全部
直接给你一简单的显示程序,就ok了!
#include <msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA_DIR P4DIR
#define DATA_OUT P4OUT
#define CLR_RS P3OUT&=~BIT0; //RS=0;
#define SET_RS P3OUT|=BIT0; //RS=1;
#define CLR_RW P3OUT&=~BIT1; //RW=0;
#define SET_RW P3OUT|=BIT1; //RW=1;
#define CLR_EN P3OUT&=~BIT2; //EN=0;
#define SET_EN P3OUT|=BIT2; //EN=1;
uchar table1[]="KOBE BRYANT";
uchar table2[]="TMAC_NO.1";

void delay1(uint z)
{
uint t,y;
for(t=z;t>0;t--)
for(y=110;y>0;y--);
}
/////////////////写命令///////////////
void write_com(uchar com)
{
CLR_RS;
CLR_RW;
CLR_EN;
DATA_OUT=com;
delay1(20);
SET_EN;
delay1(20);
CLR_EN;
delay1(20);
}
////////////////写数据///////////////
void write_data(uchar dat)
{
SET_RS;
CLR_RW;
CLR_EN;
DATA_OUT=dat;
delay1(20);
SET_EN;
delay1(20);
CLR_EN;
delay1(20);
}
/////////////////液晶初始化/////////////
void init()
{
delay1(30);
write_com(0x38);
delay1(10);
write_com(0x38);
delay1(10);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
void display(void)
{
uchar i;
write_com(0x80);
for(i=0;i<11;i++)
{
write_data(table1[i]);
}
write_com(0x80+0x40);
for(i=0;i<9;i++)
{
write_data(table2[i]);
}
}

void main()
{
WDTCTL = WDTPW + WDTHOLD;
DATA_DIR=0XFF;
DATA_OUT=0X00;
P3DIR=0XFF;
P3OUT=0X00;
init();
while(1)
{
display();
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式