DSP28335LCD1602动态显示代码
时间: 2023-09-04 19:15:55 浏览: 167
以下是一个简单的DSP28335和LCD1602动态显示的代码示例:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
//LCD1602定义
#define RS GPB1
#define RW GPB2
#define EN GPB3
#define D0 GPA0
#define D1 GPA1
#define D2 GPA2
#define D3 GPA3
#define D4 GPA4
#define D5 GPA5
#define D6 GPA6
#define D7 GPA7
//延时函数
void delay_us(unsigned int us)
{
unsigned int i, j;
for(i=0;i<us;i++)
{
for(j=0;j<5;j++);
}
}
//LCD1602初始化函数
void Init_LCD1602(void)
{
//IO口初始化
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // 0=GPIO, 1=EPWM1A, 2=Resv, 3=COMP1OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // 0=GPIO, 1=EPWM1B, 2=Resv, 3=COMP2OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // 0=GPIO, 1=EPWM2A, 2=Resv, 3=COMP3OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // 0=GPIO, 1=EPWM2B, 2=Resv, 3=COMP4OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // 0=GPIO, 1=EPWM3A, 2=Resv, 3=COMP5OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // 0=GPIO, 1=EPWM3B, 2=Resv, 3=COMP6OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // 0=GPIO, 1=EPWM4A, 2=Resv, 3=COMP7OUT
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // 0=GPIO, 1=EPWM4B, 2=Resv, 3=COMP8OUT
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; // 0=GPIO, 1=EPWM5A, 2=SCITXDB, 3=Resv
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; // 0=GPIO, 1=EPWM5B, 2=SCIRXDB, 3=Resv
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // 0=GPIO, 1=EPWM6A, 2=Resv, 3=Resv
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0; // 0=GPIO, 1=EPWM6B, 2=Resv, 3=Resv
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // 0=GPIO, 1=SCITXDA, 2=Resv, 3=TZ2
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // 0=GPIO, 1=SCIRXDA, 2=Resv, 3=TZ3
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0; // 0=GPIO, 1=CANTX, 2=Resv, 3=TZ1
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // 0=GPIO, 1=CANRX, 2=Resv, 3=TZ2
EDIS;
//初始化1602
RS = 0;
RW = 0;
EN = 0;
delay_us(50000);
EN = 1;
delay_us(50);
EN = 0;
delay_us(5000);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
//设置1602显示模式
RS = 0;
RW = 0;
EN = 1;
delay_us(50);
GPADAT = 0x20; //4位数据模式
EN = 0;
delay_us(50);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
RS = 0;
RW = 0;
EN = 1;
delay_us(50);
GPADAT = 0x28; //4位数据模式,2行显示,5x7点阵
EN = 0;
delay_us(50);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
RS = 0;
RW = 0;
EN = 1;
delay_us(50);
GPADAT = 0x0c; //显示开,光标关闭,闪烁关闭
EN = 0;
delay_us(50);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
RS = 0;
RW = 0;
EN = 1;
delay_us(50);
GPADAT = 0x01; //清屏
EN = 0;
delay_us(50);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
RS = 0;
RW = 0;
EN = 1;
delay_us(50);
GPADAT = 0x06; //文字输入时光标右移
EN = 0;
delay_us(50);
EN = 1;
delay_us(50);
EN = 0;
delay_us(200);
}
//LCD1602写入字符函数
void Write_LCD1602(unsigned char dat)
{
EN = 0;
RS = 1;
RW = 0;
delay_us(50);
GPADAT = (dat & 0xf0);
EN = 1;
delay_us(50);
EN = 0;
delay_us(50);
GPADAT = ((dat & 0x0f) << 4);
EN = 1;
delay_us(50);
EN = 0;
delay_us(50);
}
//主函数
void main(void)
{
InitSysCtrl();
Init_LCD1602();
while(1)
{
Write_LCD1602('H');
Write_LCD1602('e');
Write_LCD1602('l');
Write_LCD1602('l');
Write_LCD1602('o');
Write_LCD1602(' ');
Write_LCD1602('W');
Write_LCD1602('o');
Write_LCD1602('r');
Write_LCD1602('l');
Write_LCD1602('d');
Write_LCD1602('!');
}
}
```
在该示例中,我们使用了GPIO口来控制LCD1602,并手动控制每个操作的时序。我们首先进行了LCD1602的初始化,然后在主循环中连续向LCD1602中写入一些文本。当然,您可以根据您的需求调整这些代码。
阅读全文