永发信息网

基于MSP430F149单片机的LCD显示C代码

答案:1  悬赏:70  手机版
解决时间 2021-01-21 21:09
基于MSP430F149单片机的LCD显示C代码
最佳答案

#include
//记录显示位数的全局变量
uchar cnt = 0;
uchar shuzi[10]={''00000","11111","22222","33333","44444","55555","66666","77777","88888","99999"}

void main(void)
{
uchar i;
BCSCTL1&=~XT2OFF;
BCSCTL2|=SELM1+SELS;
do
{
IFG1&=~OFIFG;
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG; //初始化时钟
WDTCTL = WDT_ADLY_1000; // 设置内部看门狗工作在定时器模式,1000ms中断一次
IE1 |= WDTIE; // 使能看门狗中断
_BIS_SR(LPM3_bits + GIE); //CPU进入LPM3低功耗模式,同时打开全局中断
}


#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
Disp1Char(0x40,0x00,shuzi[cnt]) ;//在指定位置显示00000-99999,把5个00000当做字符显示
cnt++; //位计数变量在0~10之间循环,正好显示99999时重新再来
if(cnt == 10) cnt = 0;
}


#include
#include "cry1602.h"
typedef unsigned char uchar;
typedef unsigned int uint;


#define DataDir P4DIR
#define DataPort P4OUT
#define Busy 0x80
#define CtrlDir P3DIR
#define CLR_RS P3OUT&=~BIT0; //RS = P3.0
#define SET_RS P3OUT|=BIT0;
#define CLR_RW P3OUT&=~BIT1; //RW = P3.1
#define SET_RW P3OUT|=BIT1;
#define CLR_EN P3OUT&=~BIT2; //EN = P3.2
#define SET_EN P3OUT|=BIT2;

void DispStr(uchar x,uchar y,uchar *ptr)
{
uchar *temp;
uchar i,n = 0;

temp = ptr;
while(*ptr++ != '\0') n++; //计算字符串有效字符的个数

for (i=0;i {
Disp1Char(x++,y,temp[i]);
if (x == 0x0f)
{
x = 0;
y ^= 1;
}
}
}

void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
{
uchar i;

for (i=0;i {
Disp1Char(x++,y,ptr[i]);
if (x == 0x0f)
{
x = 0;
y ^= 1;
}
}
}

void LocateXY(uchar x,uchar y)
{
uchar temp;

temp = x&0x0f;
y &= 0x01;
if(y) temp |= 0x40; //如果在第2行
temp |= 0x80;

LcdWriteCommand(temp,1);
}

void Disp1Char(uchar x,uchar y,uchar data)
{
LocateXY( x, y );
LcdWriteData( data );
}

void LcdReset(void)
{
CtrlDir |= 0x07; //控制线端口设为输出状态
DataDir = 0xFF; //数据端口设为输出状态

LcdWriteCommand(0x38, 0); //规定的复位操作
Delay5ms();
LcdWriteCommand(0x38, 0);
Delay5ms();
LcdWriteCommand(0x38, 0);
Delay5ms();

LcdWriteCommand(0x38, 1); //显示模式设置
LcdWriteCommand(0x08, 1); //显示关闭
LcdWriteCommand(0x01, 1); //显示清屏
LcdWriteCommand(0x06, 1); //写字符时整体不移动
LcdWriteCommand(0x0c, 1); //显示开,不开游标,不闪烁
}

void LcdWriteCommand(uchar cmd,uchar chk)
{

if (chk) WaitForEnable(); // 检测忙信号?

CLR_RS;
CLR_RW;
_NOP();

DataPort = cmd; //将命令字写入数据端口
_NOP();

SET_EN; //产生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}


void LcdWriteData( uchar data )
{
WaitForEnable(); //等待液晶不忙

SET_RS;
CLR_RW;
_NOP();

DataPort = data; //将显示数据写入数据端口
_NOP();

SET_EN; //产生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}

void WaitForEnable(void)
{
P4DIR &= 0x00; //将P4口切换为输入状态

CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();

while((P4IN & Busy)!=0); //检测忙标志

CLR_EN;

P4DIR |= 0xFF; //将P4口切换为输出状态
}


void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i--;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
《小鸭子与鸭妈妈》的故事两百字左右
碧桂园浅山地址在什么地方,想过去办事
6500元左右笔记本求推荐
如何从楼宇大门的方向,看住宅风水的吉凶
酒吧吧台常用高度深度一般为多少
好你请问一下我姐送我一款手表oMEGAL-633间金
有广西的男生吗
回复:为什么都说coulson死了
《如何正确给定参战军人的各项待遇》9776号提
皮草外套烂了怎么办
北京东旭阳光门窗是什么材质的
为什么今天一号早上四点充的话费还没到?
青岛火车站与青岛北站哪个离崂山麦岛家园近
这个痣有危险吗
苏州市到灌兰县新安镇有多远
推荐资讯
日本电影《美丘》接下来怎么没有了啊?
杭上村地址在什么地方,想过去办事,
啊哈是谁说有鱼就不吃虾是什么歌的歌词
不同的铠装光缆规格型号分别有哪些用途
单选题将一条活蚯蚓分别放到下列四种场所,可
爱尔卡集成灶都有哪几种型号?
狗狗怎么突然就不听话了吖?我家的银狐
smartwatch可独立使用手机卡吗
花艺咖啡地址在什么地方,想过去办事,
龙鑫地址好找么,我有些事要过去,
着凉肩胛骨疼吃什么药
取名测名
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?