查看: 3548|回复: 3

[分享] [LPC54110开发板测试] 五、连接128x64黑白显示器

[复制链接]
  • TA的每日心情
    开心
    2017-3-31 13:54
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    6

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    48
    最后登录
    2017-5-20
    发表于 2017-4-29 17:34:42 | 显示全部楼层 |阅读模式
    [LPC54110开发板测试] 五、连接128x64黑白显示器
    将四中的mainAdcPwm.c复制一个改名为mainAdcPwmLcd.c,打开这个文件进行编辑。
    首先创建1个新文件夹,命名为incs,创建1个新文件,保存为128x64.h在这个文件夹中。在选项中默认此文件夹。在项目中将此文件夹加入,将此文件也加入。再在mainAdcPwmLcd.c文件的头部将此文件Include:
    #include "128x64.h"
    首先设定用GPIO1的8~11IO口作为串口LCD的控制口,打开board.h文档,增加以下语句:
    #define lcdGpio 1
    #define        sdat        8//PIO1_8
    #define        sclk        9//PIO1_9
    #define        sreg        10//PIO1_10
    #define        sres        11//PIO0_11
    打开mainAdcPwmLcd.c,在ioInit函数中增加以下语句:
    //Define LCD CTRL Pins
    Chip_GPIO_SetPinDIR(LPC_GPIO,  lcdGpio,sdat,true);
    Chip_GPIO_SetPinState(LPC_GPIO,lcdGpio,sdat,true);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  lcdGpio,sclk,true);
    Chip_GPIO_SetPinState(LPC_GPIO,lcdGpio,sclk,true);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  lcdGpio,sreg,true);
    Chip_GPIO_SetPinState(LPC_GPIO,lcdGpio,sreg,true);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  lcdGpio,sres,true);
    Chip_GPIO_SetPinState(LPC_GPIO,lcdGpio,sres,false);
    而后打开创建的128x64.h文档,将下边的代码考入:
    #include "board.h"
    //128x64 LCD ASCII Codes
    const unsigned char asc2[][8]={//8x6 Dots 32 to 127 + caratteri alfa_omega a seguire
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//space
    {0x00,0x1c,0x22,0x24,0x18,0x16,0x00,0x00},//!-1=32
    {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00},//"
    {0x00,0x02,0x04,0x78,0x10,0x0c,0x02,0x00},//#
    {0x00,0x7e,0x15,0x15,0x15,0x0a,0x00,0x00},//$
    {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00},//%
    {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00},//&
    {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00},//'
    {0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00},//(
    {0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00},//)
    {0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00},//  /-10=42
    {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00},//+
    {0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00},//;
    {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00},//-
    {0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00},//.
    {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00},///
    {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00},//0
    {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00},//1
    {0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00},//2
    {0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00},//3
    {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00},//4-20
    {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},//5
    {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00},//6
    {0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00},//7
    {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},//8
    {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00},//9
    {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00},//:
    {0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00},//;
    {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00},//<
    {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00},//=
    {0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00},//>-30
    {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00},//?
    {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00},//@
    {0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00},//A
    {0x00,0x41,0x7F,0x49,0x49,0x36,0x00,0x00},//B
    {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00},//C
    {0x00,0x41,0x7F,0x41,0x41,0x3E,0x00,0x00},//D
    {0x00,0x7F,0x49,0x49,0x49,0x49,0x00,0x00},//E
    {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00},//F
    {0x00,0x3E,0x41,0x41,0x49,0x7A,0x00,0x00},//G
    {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00},//H-40
    {0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00},//I
    {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00},//J
    {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00},//K
    {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00},//L
    {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00},//M
    {0x00,0x7F,0x06,0x08,0x30,0x7F,0x00,0x00},//N
    {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00},//O
    {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00},//P
    {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00},//Q
    {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00},//R-50
    {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00},//S
    {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00},//T
    {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00},//U
    {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00},//V
    {0x00,0x7F,0x20,0x18,0x20,0x7F,0x00,0x00},//W
    {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00},//X
    {0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00},//Y
    {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00},//Z
    {0x00,0x00,0x7F,0x41,0x41,0x00,0x00,0x00},//[
    {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00},//\//-60
    {0x00,0x00,0x41,0x41,0x7F,0x00,0x00,0x00},//]
    {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00},//^
    {0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00},//_
    {0x00,0x00,0x00,0x07,0x05,0x07,0x00,0x00},//' Insty
    {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00},//a
    {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00},//b
    {0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00},//c
    {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00},//d
    {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00},//e
    {0x00,0x00,0x08,0x7E,0x09,0x02,0x00,0x00},//f-70
    {0x00,0x0C,0x52,0x52,0x4C,0x3E,0x00,0x00},//g
    {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00},//h
    {0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00},//i
    {0x00,0x20,0x40,0x44,0x3D,0x00,0x00,0x00},//j
    {0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00},//k
    {0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00},//l
    {0x00,0x7C,0x04,0x78,0x04,0x78,0x00,0x00},//m
    {0x00,0x7C,0x08,0x04,0x04,0x78,0x00,0x00},//n
    {0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00},//o
    {0x00,0x7E,0x0C,0x12,0x12,0x0C,0x00,0x00},//p-80
    {0x00,0x0C,0x12,0x12,0x0C,0x7E,0x00,0x00},//q
    {0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00},//r
    {0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00},//s
    {0x00,0x04,0x3F,0x44,0x40,0x20,0x00,0x00},//t
    {0x00,0x3C,0x40,0x40,0x3C,0x40,0x00,0x00},//u
    {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00},//v
    {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00},//w
    {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00},//x
    {0x00,0x1C,0xA0,0xA0,0x90,0x7C,0x00,0x00},//y
    {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00},//z-90
    {0x00,0x00,0x08,0x36,0x41,0x00,0x00,0x00},//{
    {0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00},//|
    {0x00,0x00,0x41,0x36,0x08,0x00,0x00,0x00},//}
    {0x00,0x08,0x04,0x08,0x10,0x08,0x00,0x00},//~
    {0x00,0x5c,0x62,0x02,0x62,0x5c,0x00,0x00},//OM
    {0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14},//horiz lines-96
    };
    //Delayer
    void delay0(int counter){
    int i,j;
    for(i=0;i<counter;i++){for(j=0;j<i;j++){;}}
    }
    //Write Plus
    void wri(void){
    Chip_GPIO_SetPinOutLow(LPC_GPIO,lcdGpio,sclk);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,lcdGpio,sclk);
    }
    //a B Data to LCD,dt:data,com:1-data/0-command
    void b2l(unsigned char dt,unsigned char com){
    unsigned char i;
    if(com) Chip_GPIO_SetPinOutHigh(LPC_GPIO,lcdGpio,sreg);
    else Chip_GPIO_SetPinOutLow(LPC_GPIO,lcdGpio,sreg);
    for(i=0;i<8;i++){
      if(dt&0x80) Chip_GPIO_SetPinOutHigh(LPC_GPIO,lcdGpio,sdat);
      else Chip_GPIO_SetPinOutLow(LPC_GPIO,lcdGpio,sdat);
      dt=dt<<1;   
      wri();
    }
    }
    //Set XY
    void setXY(unsigned char pag,unsigned char col){
    b2l(0xB0+pag,0);//page3~0第1~第3行
    //col+=4;
    b2l(0x10+((col&0xF0)>>4),0);//row-H4
    b2l(col&0x0F,0);//row-L4
    }
    //Write a ASCII to LCD
    void c2l(unsigned char pag,unsigned char col,unsigned char c){
    unsigned char line;
    setXY(pag,col*8);               
    for(line=0;line<8;line++) b2l(asc2[c][line],1);
    }
    //LCD Clear
    void lcdClear(void){
    unsigned char pag,col;
    for(pag=0xB8;pag>=0xB0;pag--){
      b2l(pag,0);
      b2l(0x10,0);
      b2l(0x00,0);
      for(col=0;col<132;col++){b2l(0x00,1);}
    }
    }
    //12864 LCD Initial
    void lcdInit(void){
    Chip_GPIO_SetPinOutLow(LPC_GPIO,1,sres);
    delay0(2000);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,1,sres);
    delay0(2000);
    b2l(0xAE,0);//AE=Disp Off/AF=Disp On
    b2l(0xE2,0);//LCD Initial
    b2l(0xA1,0);//Refresh Colum:A0=1-->132/A1=132-->1
    b2l(0xC8,0);//Refresh COM:C0=1-->64/C8=64-->1||A0+C8:col--X-->4
    b2l(0xA2,0);//A2=1/65=1/7__A3=1/65=1/9
    delay0(190);
    b2l(0x2F,0);//Power Mode:28+VC+VR+VF
    delay0(100);
    b2l(0x24,0);//20->27=1.9,2.19,2.55,3.02,3.61,4.35,5.29,6.48V/Bian Vol
    delay0(100);
    b2l(0x81,0);//V0 Vol,After:Num
    b2l(0x28,0);//000000~111111=0~63=8.83~11.17V/30=10V
    delay0(100);
    b2l(0xA4,0);//A4-All Off/A5-All On
    b2l(0x10,0);//Column High 4 start:0x10+0000->1111
    b2l(0x00,0);//Column Low 4 start:0x10+0000->1111
    b2l(0x40,0);//40+xxxxxx=Disp From 0->63
    b2l(0x10,0);//10+xxxx=Disp Column Migh 4 bts
    b2l(0x00,0);//00+xxxx=Disp Column low bits xxxxxxxx=0->131
    b2l(0xAD,0);//AC=Corser Off/AD=Corser On/After Num
    b2l(0x03,0);//00=OFF/01=1S/02=0.5S/03=All On
    b2l(0xAF,0);//Start Display
    }
    //END Files//
    打开mainAdcPwmLcd.c,在头上加入:
    #include "128x64.h"
    在后边加入:
    void dispBase(void);
    void dispMes(void);
    Systick_Handler函数中将PWM周期语句改为[上节中的代码有误]:
    if(duty0<98){ddut0++;}else{ddut0=1;duty0=0;}duty0+=ddut0;
    if(duty1<98){ddut1++;}else{ddut1=2;duty1=0;}duty1+=ddut1;
    Chip_SCTPWM_SetDutyCycle(LPC_SCT,3,Chip_SCTPWM_PercentageToTicks(LPC_SCT,duty0));
    Chip_SCTPWM_SetDutyCycle(LPC_SCT,4,Chip_SCTPWM_PercentageToTicks(LPC_SCT,duty1));
    在main主函数循环语句前加入LCD初始化等函数:
    lcdInit();
    lcdClear();
    dispBase();
    在循环语句while中加入:
      dispMes();
    在程序的最后加入:
    //Display Based 12864
    void dispBase(void){
    //LPC54110 Test
    c2l(0,0,44);c2l(0,1,80);c2l(0,2,67);c2l(0,3,21);c2l(0,4,20);c2l(0,5,17);c2l(0,6,17);
    c2l(0,7,16);c2l(0,9,52);c2l(0,10,69);c2l(0,11,83);c2l(0,12,84);
    c2l(1,0,42);c2l(1,1,51);//JS
    c2l(2,0,33);c2l(2,1,36);c2l(2,2,35);c2l(2,3,16);//ADC0
    c2l(3,0,48);c2l(3,1,45);c2l(3,2,16);//PW0
    c2l(3,8,48);c2l(3,9,45);c2l(3,10,17);//PW1
    }
    //Display Test Data 12864
    void dispMes(void){
    c2l(1,3,16+(js/100000)%10);c2l(1,4,16+(js/10000)%10);c2l(1,5,16+(js/1000)%10);c2l(1,6,16+(js/100)%10);c2l(1,7,16+(js/10)%10);c2l(1,8,16+(js)%10);
    c2l(2,5,16+(adcVal0/1000)%10);c2l(2,6,16+(adcVal0/100)%10);c2l(2,7,16+(adcVal0/10)%10);c2l(2,8,16+(adcVal0)%10);
    c2l(3,4,16+(duty0/100)%10);c2l(3,5,16+(duty0/10)%10);c2l(3,6,16+(duty0)%10);
    c2l(3,12,16+(duty1/100)%10);c2l(3,13,16+(duty1/10)%10);c2l(3,14,16+(duty1)%10);
    }
    编译下载后从串口得到的数据见图51,图52,图53的LCD显示ADC和PWM周期值,左上的LED红和绿的亮暗反映了PWM1,PWM2的高低。

    51

    51

    52

    52

    53

    53
    开心每一天
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-2-5 17:05
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    28

    主题

    1814

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    5875
    最后登录
    2025-6-26
    发表于 2017-5-1 21:09:08 | 显示全部楼层
    帅气,真棒
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13135
    最后登录
    2019-1-27
    发表于 2017-5-2 16:25:34 | 显示全部楼层
    楼主可以使用编辑器的代码功能插入代码,回直观很多哦
    代码.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-31 13:54
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    6

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    48
    最后登录
    2017-5-20
     楼主| 发表于 2017-5-19 07:14:06 | 显示全部楼层
    谢谢提醒,以后注意
    开心每一天
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-25 06:47 , Processed in 0.087316 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表