打印
[应用方案]

八月新唐+点亮LCD1602

[复制链接]
2298|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abc9981|  楼主 | 2017-8-14 15:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 abc9981 于 2017-8-16 14:05 编辑

之前参加研讨会新唐送了两块开发板,躺在抽屉里快生根了,这次拿出来耍耍。


一块是nano103s,另一块是M451
nano103s附板是Nu-Link_Me V3.0目前应该是较新的烧录模块,而且还带有串口功能 ,烧录跟串口直接解决了,不用再接一个串口TTL
做过1602的应该都知道,1602是5v的电平驱动,而nano103是3v的驱动查询芯片手册配置兼容引脚控制


根据手册信息,选用PC.0~PC.3作为data口低4位,PC.8~PC.11作为data口高4位,rs PB.9 rw PB.10 ep PB.11。
选择好引脚后就可以接线了。

Nu-Link_Me V3.0的优势就是板载的串口TTL,将四个拨码开关拨到NO,就可以在电脑中直接链接UART0,实在是方便


接下来就是写代码了
程序主要运用的是GPIO的功能,加上串口,跟延时处理,就可以搞定了

主要自己写的就是LCD1602的驱动程序了
LCD1602.H
#ifndef __LCD1602_H__
#define __LCD1602_H__

#include "Nano103.h"

#define uchar unsigned char
#define uint unsigned int
#define ushort        unsigned short

#define rs         PB9
#define rw        PB10
#define ep        PB11


void lcd_init(void);
void lcd_pos(uchar x,uchar y);
void wnchar(uchar weizhi,uchar zifu[]);

#endif
LCD1602.C
#include "Lcd1602.h"



void delay4us()
{
        CLK_SysTickDelay(20);
}

/**********忙测试**********/
//uchar Busy_Check()
//{
//        uchar LCD_Status;
//        rs=0;
//        rw=1;
//        ep=1;
//        delay4us();
//        LCD_Status=P0&0x80;
//        ep=0;
//        return LCD_Status;
//}

/*************写指令************/
void lcd_wcmd(uchar cmd)
{
//        while(Busy_Check());
        uint data;
        data = (uint)(cmd & 0xf0)<<4;
        data += (cmd &0x0f);
        rs=0;
        rw=0;
        ep=0;
        delay4us();
        PC->DOUT = data;
        delay4us();
        ep=1;
        delay4us();
        ep=0;
}

/************指定位置******************/
void lcd_pos(uchar x,uchar y) //设置液晶显示位置,x=0为第一行,1为第2行
{
        uchar pos;
        if(x == 0)
                x = 0x80;
        else if(x == 1)
                x = 0x80 + 0x40;
        pos = x + y;
        lcd_wcmd(pos);
}

/**************写数据******************/
void lcd_wdat(uchar dat)
{
//        while(Busy_Check());
        uint data;
        data = (uint)(dat & 0xf0)<<4;
        data += (dat &0x0f);
        rs=1;
        rw=0;
        ep=0;
        PC->DOUT = data;
        delay4us();
        ep=1;
        delay4us();
        ep=0;
}

/************写一串字符**********************/
void wnchar(uchar weizhi,uchar zifu[])//写N个字符
{
        uchar i;
        lcd_pos(weizhi,0);
        for(i=0; ;i++)
        {
                lcd_wdat(zifu[i]);
                if(zifu[i+1]=='\0')
                break;
        }
}


/**********初始化***************/
void lcd_init()
{
        lcd_wcmd(0x38);
        delay4us();
        lcd_wcmd(0x0c);
        delay4us();
        lcd_wcmd(0x06);
        delay4us();
        lcd_wcmd(0x01);
        delay4us();
}
main.c
/******************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]     main.c
* [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
* $Revision: 4 $
* $Date: 15/12/27 1:12p $
* [url=home.php?mod=space&uid=247401]@brief[/url]    A project template for Nano103 MCU.
*
* @note
* Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "Nano103.h"
#include "Lcd1602.h"


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable External XTAL (4~24 MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

    /* Waiting for 12MHz clock ready */
    CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

    /* Switch HCLK clock source to HXT */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT,CLK_HCLK_CLK_DIVIDER(1));

    /* Enable UART clock */
    CLK_EnableModuleClock(UART0_MODULE);

    /* Select UART clock source from HXT */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HXT, CLK_UART0_CLK_DIVIDER(1));

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();


    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set GPB multi-function pins for UART0 RXD and TXD */
    SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk);
    SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB0MFP_UART0_RXD | SYS_GPB_MFPL_PB1MFP_UART0_TXD);
    /* Lock protected registers */
    SYS_LockReg();
}

/*
* This is a template project for Nano103 series MCU. Users could based on this project to create their
* own application without worry about the IAR/Keil project settings.
*
* This template application uses external crystal as HCLK source and configures UART0 to print out
* "Hello World", users may need to do extra system configuration based on their system design.
*/

int main()
{

        uchar data[]="Hello,21ic.com!";
        uchar data1[]="MyID:abc9981";
    SYS_Init();
    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);
    /* Connect UART to PC, and open a terminal tool to receive following message */
    printf("八月,新唐你好\r\n");
        printf("Hello,21ic.com!\r\n");

    /* Got no where to go, just loop forever */

        GPIO_SetMode(PA, BIT14, GPIO_PMD_OUTPUT);
        GPIO_SetMode(PB, BIT9|BIT10|BIT11, GPIO_PMD_OUTPUT);
        GPIO_SetMode(PC, 0x00000f0f, GPIO_PMD_OUTPUT);
        printf("LCD1602  INIT!\r\n");
        lcd_init();
        CLK_SysTickDelay(1000000);
        printf("Display 'Hello,21ic.com!'\r\n");
        wnchar(0,data) ;
        printf("Display 'MyID:abc9981'\r\n");
        wnchar(1,data1) ;
        printf("MyID:abc9981\r\n");
    while(1)
        {
                PA->DOUT = 0x00;                /* Output low */
            CLK_SysTickDelay(1000000);
                PA->DOUT = 0x4000;                /* Output low */
            CLK_SysTickDelay(1000000);
        }

}
代码搞定,现在就是成果展示了

串口数据



LCD显示



LCD1602通常都是在学校的时候用的,这次又一次拿出了1602感觉好像又回到了读书的时候,真的很怀念
现在大学生电子设计大赛正在进行,祝所有参赛选手能获得好成绩!





附件太大了,可以前去官网下载nano103s相关资料:http://www.nuvoton.com.cn/hq/products/microcontrollers/arm-cortex-m0-mcus/nano103-base-series/?__locale=zh



  
沙发
dongnanxibei| | 2017-8-14 16:40 | 只看该作者
我看看你们都有什么板子,新唐好久没送板子了。

使用特权

评论回复
板凳
abc9981|  楼主 | 2017-8-14 17:37 | 只看该作者
dongnanxibei 发表于 2017-8-14 16:40
我看看你们都有什么板子,新唐好久没送板子了。

现场研讨会一般不是都有板子的吗

使用特权

评论回复
地板
yangweiping| | 2017-8-14 20:01 | 只看该作者
牛X,着实牛X

使用特权

评论回复
5
yiy| | 2017-8-14 21:11 | 只看该作者
这么多,牛X。

使用特权

评论回复
6
huangcunxiake| | 2017-8-14 22:29 | 只看该作者
复制一份,留着点我的LCD

使用特权

评论回复
7
huangcunxiake| | 2017-8-14 22:30 | 只看该作者
楼主,工程文件打包发一下不,学习学习你的代码。

使用特权

评论回复
8
21mengnan| | 2017-8-14 22:52 | 只看该作者
漂亮,土豪一枚。

使用特权

评论回复
9
abc9981|  楼主 | 2017-8-15 08:59 | 只看该作者
huangcunxiake 发表于 2017-8-14 22:30
楼主,工程文件打包发一下不,学习学习你的代码。

主要代码都贴出来了,其他的就是新唐的例程了,我还是把新唐的资料也发出来吧,免得你们还要去找

使用特权

评论回复
10
abc9981|  楼主 | 2017-8-15 09:01 | 只看该作者
21mengnan 发表于 2017-8-14 22:52
漂亮,土豪一枚。

板子新唐送的,LCD都是以前留下的,真的要算成本的花10元不到吧

使用特权

评论回复
11
zhuotuzi| | 2017-8-19 18:17 | 只看该作者
不错,这活动一出,好多值得我们学习的分享。

使用特权

评论回复
12
zhuotuzi| | 2017-8-19 18:17 | 只看该作者
都是货真价实的经验分享,学习学习。。

使用特权

评论回复
13
wanduzi| | 2017-8-19 21:56 | 只看该作者
好羡慕各位有板子的。

使用特权

评论回复
14
643757107| | 2017-8-20 16:20 | 只看该作者
这板子给力,之前我也有一块。

使用特权

评论回复
15
643757107| | 2017-8-20 16:20 | 只看该作者
051和451学习新唐单片机的最佳选择。

使用特权

评论回复
16
mintspring| | 2017-8-27 16:04 | 只看该作者
代码不错,拿走用用。

使用特权

评论回复
17
huahuagg| | 2017-8-27 18:51 | 只看该作者
PC->DOUT 这个可以放头文件H里面,统一一下比较好。

使用特权

评论回复
18
dongnanxibei| | 2017-8-27 21:10 | 只看该作者
这板子看着真漂亮。

使用特权

评论回复
19
allen969| | 2017-8-28 17:19 | 只看该作者
软件技术可以哦,我公司有新唐的软件案子外包,有兴趣加 QQ 872918265    SL哦

使用特权

评论回复
20
tanik| | 2017-10-5 22:30 | 只看该作者
货真价实的经验分享,学习学习。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

270

帖子

2

粉丝