3198|1

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求TM4c123驱动lcd1602代码 [复制链接]

/******************************************************************************
自己写的 但是没有显示 lcd1602数据位我是直接街道PB口的  不知道行不?求解
******************************************************************************/
#include
#include
#include
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/fpu.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
#include "driverlib/gpio.h"
#include "driverlib/adc.h"
#include "inc/hw_gpio.h"


void LCD_Init(void);
void LCD_write_com(uint8_t com);
void LCD_write_dat(uint8_t dat);
void LCD_disp_char(uint8_t x,uint8_t y,uint8_t dat);
void delay_n40us(uint32_t n);
void   writeDataLcd(uint8_t dat);
uint8_t  ttt[]="Circuits";
uint8_t  kkk[]="Zhang ning";

int main(void)

{
       
        //设置系统时钟为50MHz (400/2/4=50)
        SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

while(1)
   {
  uint32_t i=0;
  LCD_Init();
    LCD_write_com(0x80);//0x80第一行从顶头开始显示,加n,后移n位显示
    for (i=0;i<16;i++)
  {
    writeDataLcd(ttt[i]);
     delay_n40us(15000);
  }
delay_n40us(30000);
delay_n40us(30000);
delay_n40us(50000);
     LCD_write_com(0x80+64);//0x80+64,第二行从顶头开始显示,加64再加n,第二行从n开始显示。
  for (i=0;i<16;i++)
        {
     writeDataLcd(kkk[i]);
     delay_n40us(15000);
        }
        LCD_write_com(0x80);
        LCD_disp_char(2,1,' ');
        delay_n40us(20000);
   }
}


/******************************************************************************
* 函 数 名  : LCD12864_Busy
* 函数功能: 检测LCD是否忙
* 输    入   : 无
* 输    出   : 1或0?1表示不忙?0表示忙?
*******************************************************************************
uchar LCD12864_Busy(void)
{
    uchar i = 0;
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_3 );//RS=0,RW=1
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, GPIO_PIN_4);   //E=1
    delay_Nms(1);
    while((GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7) & 0x80) == 0x80) //检测读取到的值
    {
        i++;
        if(i > 100)
        {
            GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
            return 0;    //超过等待时间返回0表示失败
        }
    }
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
    return 1;
}*/
/*******************************************
函数名称:Ini_Lcd
功    能:初始化液晶模块
参    数:无
返回值  :无
********************************************/
void LCD_Init(void)
{
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//使能GPIOA
        GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);//PA2,3,4设为输出
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能GPIOB
    GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);//PB设为输出

        LCD_write_com(0x38);//设置8位格式,2行,5x7

        LCD_write_com(0x0c);//整体显示,关光标,不闪烁

        LCD_write_com(0x06);//设定输入方式,增量不移位--------------
       
        LCD_write_com(0x01);//清除屏幕显示----------------

        delay_n40us(100);
}

/**************************************************
*名称:void write_com(uchar com)
*功能:向1602写指令
*入口参数:com
*出口参数:无
**************************************************/
void LCD_write_com(uint8_t com)
{       
          
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,~GPIO_PIN_2);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,~GPIO_PIN_3);//RS=0,RW=0

        GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, com);  //PB=com
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, GPIO_PIN_4);   //E=1
        delay_n40us(1);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
        delay_n40us(1);
}

/**************************************************
*名称:void write_dat(uchar dat)
*功能:向1602写数据
*入口参数:dat
*出口参数:无
**************************************************/
void LCD_write_dat(uint8_t dat)
{
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,~GPIO_PIN_3);
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,GPIO_PIN_2);//RS=1,RW=0
        GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, dat);  //PB=dat
       
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,GPIO_PIN_4);   //E=1
        delay_n40us(1);
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
        delay_n40us(1);
}

/******************************************************************************
* 函 数 名   : LCD12864_ReadData
* 函数功能 : 读取数据
* 输    入     : 无
* 输    出: 读取到的8位数据
********************************************************/
/*------------------------------------------------------------------------------------
uchar LCD12864_ReadData(void)
{
    uchar readValue;
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,GPIO_PIN_2);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,GPIO_PIN_3);//RS=1,RW=1
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
    delay_Nms(1);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, GPIO_PIN_4);   //E=1
    delay_Nms(1);
    GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                           GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);//PB设为输入
    readValue =GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
    GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
                           GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);//PB设为输出
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
    return readValue;
}
------------------------------------------------------------------------------------------*/
//写入字符串函数
void   writeDataLcd(uint8_t dat)// 写入数据
  {
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,GPIO_PIN_2 );//RS=1,RW=0
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,~GPIO_PIN_3);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
        GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, dat);  //PB=dat
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,GPIO_PIN_4);   //E=1
   delay_n40us(10);
    GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4);   //E=0
  }

//*******显示一个字符函数*********

void LCD_disp_char(uint8_t x,uint8_t y,uint8_t dat)

{

uint8_t address;

if(y==1)

address=0x80+x;

else

address=0xc0+x;

LCD_write_com(address);

LCD_write_dat(dat);

}
void delay_n40us(uint32_t n)

{ uint32_t i;

uint8_t j;

for(i=n;i>0;i--)

for(j=0;j<2;j++); //在这个延时循环函数中我只做了2次循环,

}

最新回复

参考一下这个,之前网友在 LM3S811 上实现的。  详情 回复 发表于 2017-5-19 10:14
 
点赞 关注

回复
举报

918

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
参考一下这个,之前网友在 LM3S811 上实现的。

Demo_EK-LM3S811.rar

246.35 KB, 下载次数: 32

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表