利用msp430f149和1602液晶显示设计电子表的相关程序
时间: 2023-12-10 18:37:07 浏览: 55
下面是利用msp430f149和1602液晶显示设计电子表的程序:
```C
#include<msp430f149.h>
#define uchar unsigned char
#define uint unsigned int
uchar code[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 数码管显示0~9的编码
void DelayMs(uint ms)
{
uint i, j;
for(i=0; i<ms; i++)
for(j=0; j<535; j++);
}
void LcdWriteCom(uchar com)
{
P2DIR |= BIT1; // RS=0,选择指令寄存器
P2OUT &= ~BIT0; // E=0,拉低E的电平
P1OUT = com; // 将指令写入P1口
P2OUT |= BIT0; // E=1,拉高E的电平
DelayMs(1); // 拉高E电平1ms
P2OUT &= ~BIT0; // E=0,拉低E的电平
}
void LcdWriteData(uchar dat)
{
P2DIR |= BIT1; // RS=1,选择数据寄存器
P2OUT &= ~BIT0; // E=0,拉低E的电平
P1OUT = dat; // 将数据写入P1口
P2OUT |= BIT0; // E=1,拉高E的电平
DelayMs(1); // 拉高E电平1ms
P2OUT &= ~BIT0; // E=0,拉低E的电平
}
void LcdInit()
{
P1DIR |= 0xFF; // 将P1口全部设为输出
P2DIR |= BIT0 + BIT1; // 将P2.0和P2.1设为输出
P2OUT &= ~(BIT0 + BIT1); // 初始化E=0
LcdWriteCom(0x38); // 8位数据总线,2行显示,5*7点阵字符
LcdWriteCom(0x0C); // 开显示,光标不显示
LcdWriteCom(0x06); // 输入字符后光标右移,不移动显示屏
LcdWriteCom(0x01); // 清除显示屏
}
void DisplayNum(uchar num)
{
uchar i, j, k;
i = num / 100; // 获取百位数
j = (num / 10) % 10; // 获取十位数
k = num % 10; // 获取个位数
LcdWriteCom(0x80); // 写入第一行第一个位置
LcdWriteData(code[i]); // 写入百位数
LcdWriteData(code[j]); // 写入十位数
LcdWriteData(code[k]); // 写入个位数
}
void main()
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
LcdInit(); // 初始化液晶显示屏
while(1)
{
DisplayNum(123); // 显示数字123
DelayMs(1000); // 延时1秒
}
}
```
在上面的程序中,我们首先定义了数字0~9的编码,然后定义了延时函数`DelayMs`、写入指令函数`LcdWriteCom`、写入数据函数`LcdWriteData`、初始化函数`LcdInit`和显示数字函数`DisplayNum`。在`main`函数中,我们首先关闭看门狗定时器,然后初始化液晶显示屏,进入一个无限循环中,每隔1秒钟在液晶显示屏上显示数字123。
需要注意的是,本程序中使用了P1口和P2口来控制1602液晶显示屏,其中P1口用于传输数据,P2.0口用于控制E的电平,P2.1口用于控制RS的电平。在实际使用时,需要根据实际连接情况进行修改。
阅读全文