查看: 3285|回复: 7

[原创] 【智能生活-KL25Z】实验二 KS0713 黑白LCD实验

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-9-1 16:46:47 | 显示全部楼层 |阅读模式
    本帖最后由 zhjb1 于 2016-9-1 16:49 编辑

    FRDM_KL25Z 实验二 KS0713 黑白LCD实验
    先声明,KS0713属于无背光LCD,可以从2.5V以上开始显示,光线有的情况下,可视性很好,并且字符较大本身面积不太大,大约是102X32点阵,当数据较多时需要良好地设计屏幕。可以8位并口和串口,本例采用串口,一共6根线。
    为了适应用法,采用函数模块的方式——LCD单独两个lcd.c和lcd.h
    lcd.h:
    //KS0713 LCD
    #ifdef __cplusplus
    extern "C" {
    #endif

    //Set LCD Ctrl IO
    #define ck MKL_PORTD
    #define ckPin 0
    #define da MKL_PORTD
    #define daPin 1
    #define cd MKL_PORTD
    #define cdPin 2
    #define res MKL_PORTD
    #define resPin 3
    #define key PORTE
    #define keyPin 25

    //Delayer
    void DelayMs(int counter);

    //Write Plus
    void wri(void);

    //a B Data to LCD,dt:data,com:1-data/0-command
    void b2l(unsigned char dt,unsigned char com);

    //Set LCD col:0-102 pag:0-8
    void setXY(unsigned char pag,unsigned char col);

    //LCD Clear
    void lcdClear(void);

    //Display a ASCII 8X8,c:Char in cha[]
    void c2lx(unsigned char pag,unsigned char col,unsigned char c);

    //Display a ASCII 8X16,c:Char in cha[]
    void c2l(unsigned char pag,unsigned char col,unsigned char c);

    //12X12 dots LCD disp,row,page:,c:,han
    void h2l(unsigned char pag, unsigned char col,unsigned char c);

    //LCD Initial
    void lcdInit(void);

    //Display BaseData
    void dispBase(void);

    //Disp Mesuger
    void dispMes(void);

    //Chinese
    void disHz(void);

    //Display ASCiI Test
    void disAsc(void);

    #ifdef __cplusplus
    }
    #endif

    lcd.c
    //KS0713 LCD
    #include "includes.h"
    #include "lcd.h"

    extern INT32U t0,tt,k,js,duty,duty1,duty2,speed,js;
    extern INT16U adcVal,value,value2,value3,dir1,dir2,ctrl,ford,left,right,x,y,z;
    extern INT8U status0_value;
    //上述的许多变量还没有用,以后会用的

    //0713 LCD 非标ASCII!!!
    const unsigned char asc2[][6]={//宋体字:宽x高=7x12
    {0x00,0x3E,0x45,0x49,0x51,0x3E},//0
    {0x00,0x00,0x21,0x7F,0x01,0x00},//1
    {0x00,0x31,0x43,0x45,0x49,0x31},//2
    {0x00,0x22,0x49,0x49,0x49,0x36},//3
    {0x00,0x04,0x0C,0x14,0x7F,0x04},//4
    {0x00,0x72,0x51,0x51,0x51,0x4E},//5-5
    {0x00,0x3E,0x49,0x49,0x49,0x06},//6
    {0x00,0x40,0x43,0x4C,0x50,0x60},//7
    {0x00,0x36,0x49,0x49,0x49,0x36},//8
    {0x00,0x30,0x48,0x48,0x48,0x3F},//9
    {0x00,0x1F,0x24,0x64,0x24,0x1F},//A-10
    {0x00,0x41,0x7F,0x49,0x49,0x36},//B
    {0x00,0x3E,0x41,0x41,0x41,0x22},//C
    {0x00,0x41,0x7F,0x41,0x41,0x3E},//D
    {0x00,0x41,0x7F,0x49,0x49,0x63},//E
    {0x00,0x41,0x7F,0x49,0x5C,0x60},//F-15
    {0x00,0x3E,0x41,0x45,0x47,0x24},//G
    {0x41,0x7F,0x08,0x08,0x08,0x7F},//H
    {0x00,0x00,0x41,0x7F,0x41,0x00},//I
    {0x00,0x42,0x41,0x7F,0x40,0x40},//J
    {0x00,0x41,0x7F,0x59,0x24,0x43},//K-20
    {0x00,0x40,0x7F,0x41,0x01,0x03},//L
    {0x00,0x7F,0x20,0x1E,0x20,0x7F},//M
    {0x00,0x7F,0x30,0x18,0x06,0x7F},//N
    {0x00,0x3E,0x41,0x41,0x41,0x3E},//O
    {0x00,0x41,0x7F,0x49,0x48,0x30},//P-25
    {0x00,0x3E,0x41,0x47,0x42,0x3D},//Q
    {0x00,0x41,0x7F,0x49,0x4C,0x33},//R
    {0x00,0x32,0x49,0x49,0x49,0x26},//S
    {0x00,0x60,0x41,0x7F,0x41,0x60},//T
    {0x00,0x7E,0x01,0x01,0x01,0x7E},//U-30
    {0x00,0x7C,0x02,0x01,0x02,0x7C},//V
    {0x00,0x7C,0x03,0x3C,0x03,0x7C},//W
    {0x00,0x43,0x24,0x18,0x24,0x43},//X
    {0x00,0x60,0x18,0x07,0x18,0x60},//Y
    {0x00,0x63,0x45,0x49,0x51,0x63},//Z-35
    {0x00,0x00,0x00,0x01,0x00,0x00},//.
    {0x00,0x14,0x14,0x14,0x14,0x14},//=
    {0x00,0x08,0x08,0x3E,0x08,0x08},//+
    {0x00,0x80,0x80,0x80,0x80,0x80},//-
    {0x00,0x00,0x00,0x24,0x00,0x00},//:-40
    };
    const unsigned char hanzi[][24]={//12X12 Chinese Point code 玩园地单片机频率电压测量
    {0x00,0x44,0x44,0x7F,0x44,0x08,0x48,0x4F,0x48,0x4F,0x48,0x08,0x00,0x20,0x20,0xC0,0x40,0x10,0x60,0x80,0x00,0xE0,0x10,0x70},
    {0x00,0x00,0xFF,0x84,0xA4,0xA7,0xA4,0xA7,0xA4,0x84,0x80,0xFF,0x00,0x00,0xF0,0x50,0x90,0x10,0x10,0x90,0x50,0xD0,0x10,0xF0},
    {0x00,0x08,0x08,0xFF,0x08,0x04,0x3F,0x08,0xFF,0x10,0x21,0x3F,0x00,0x20,0x20,0xC0,0x40,0x00,0xE0,0x10,0x90,0x10,0x10,0x70},
    {0x00,0x00,0x3E,0xAA,0x6A,0x2A,0x3F,0x2A,0x6A,0xAA,0x3E,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x80},
    {0x00,0x00,0x00,0x7F,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x08,0x00,0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00},
    {0x00,0x11,0x16,0xFF,0x14,0x02,0x7F,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x00,0xF0,0x10,0x20,0xC0,0x00,0x00,0xE0,0x10,0x70},
    {0x00,0x08,0x7B,0x08,0xFF,0x48,0x49,0x9F,0xB0,0xD7,0x90,0x9F,0x00,0x90,0x10,0x20,0x40,0x80,0x00,0x90,0x20,0xC0,0x20,0x90},
    {0x00,0x40,0x51,0x4A,0x59,0x6B,0xCD,0x4B,0x51,0x4A,0x51,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40},
    {0x00,0x3F,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0x3F,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x10,0x70},
    {0x00,0x00,0x7F,0x40,0x42,0x42,0x42,0x5F,0x42,0x42,0x42,0x40,0x00,0x10,0xE0,0x10,0x10,0x10,0x10,0xF0,0x10,0x90,0x50,0x10},
    {0x00,0x44,0x22,0x7F,0x40,0x5F,0x40,0x7F,0x00,0x3F,0x00,0xFF,0x00,0x20,0x40,0x90,0x20,0xC0,0x20,0x90,0x00,0x80,0x10,0xF0},
    {0x00,0x10,0xFF,0x95,0x95,0x95,0xDF,0xB5,0x95,0x95,0xFF,0x10,0x00,0x10,0x50,0x50,0x50,0x50,0xF0,0x50,0x50,0x50,0x50,0x10},
    };
    //Write Plus
    void wri(){
    GPIO_CLR(MKL_PORTD,0);
    GPIO_SET(MKL_PORTD,0);
    }
    //Write 1 byte to LCD,dt:data/comata-1,Command-0
    void b2l(unsigned char dt,unsigned char com){
    unsigned char i;
    if(com==1){GPIO_SET(MKL_PORTD,2);}else{GPIO_CLR(MKL_PORTD,2);}
    for(i=0;i<8;i++){
      if(dt&0x80){GPIO_SET(MKL_PORTD,1);}else{GPIO_CLR(MKL_PORTD,1);}
      dt=dt<<1;
      wri();
    }
    }
    //Set LCD col:0-102 pag:0-8
    void setXY(unsigned char pag,unsigned char col){
    b2l(0xB0+pag,0);//page
    col+=0x04;//+4-->4bit||正向显示时,注释掉
    b2l(0x10+((col&0xF0)>>4),0);//row-H4
    b2l(col&0x0F,0);//row-L4
    }
    //LCD Clear
    void lcdClear(void){
    unsigned char pag,col;
    for(pag=0;pag<8;pag++){setXY(pag,0);
      for(col=0;col<132;col++){b2l(0x00,1);};}
    }
    //c:Char,cha[]
    void c2l(unsigned char pag,unsigned char col,unsigned char c){
    unsigned char line;
    setXY(pag,col*6);  
    for (line=0;line<6;line++) b2l(asc2[c][line],1);
    }
    //12X12 dots LCD disp,row,page:,c:,han
    void h2l(unsigned char pag, unsigned char col,unsigned char c){
    unsigned char i;  
    setXY(pag,col*6);
    for(i=0;i<12;i++){b2l(hanzi[c],1);}
    setXY(pag-1,col*6);
    for(i=12;i<24;i++){b2l(hanzi[c],1);}
    }
    //Like 0108LCD Initial
    void lcdInit(void){
    DelayMs(1000);
    GPIO_CLR(MKL_PORTD,3);//Reset LCD
    DelayMs(1000);
    GPIO_SET(MKL_PORTD,3);
    DelayMs(1000);
    b2l(0xAE,0);//AE=关闭显示/AF=开显示
    b2l(0xE2,0);//LCD初始化
    b2l(0xA0,0);//刷新行顺序A0=1~132列/A1=132~1
    b2l(0xC0,0);//刷新纵顺序C0=1~64行/C8=64~1||A0+C8下句col去掉4
    b2l(0xA2,0);//A2=1/65=1/7__A3=1/65=1/9速率
    DelayMs(1);
    b2l(0x2F,0);//电源模式28+VC+VR+VF
    DelayMs(50);
    b2l(0x23,0);//20~27=1.9,2.19,2.55,3.02,3.61,4.35,5.29,6.48V/偏压
    DelayMs(50);
    b2l(0x81,0);//V0电压,后跟参数
    b2l(0x28,0);//000000~111111=0~63=8.83~11.17V/30=10V
    DelayMs(50);
    b2l(0xA4,0);//A4-全显Off/A5-全显On[全黑]
    b2l(0x10,0);//显示列Column高4开始0x10+0000~1111
    b2l(0x00,0);//显示列Column低4开始0x10+0000~1111
    b2l(0xAF,0);//开始显示
    DelayMs(200);
    }
    //Display BaseData
    void dispBase(void){
    c2l(3,5,29);c2l(3,6,14);c2l(3,7,28);c2l(3,8,29);c2l(3,10,10);c2l(3,11,13);c2l(3,12,12);//Test ADC
    c2l(3,14,19);c2l(3,15,28);c2l(3,16,26);c2l(3,18,25);c2l(3,19,32);c2l(3,20,22);//JSQ PWM
    c2l(2,5,19);c2l(2,6,28);c2l(2,7,26);c2l(2,8,40);//JSQ
    c2l(1,5,10);c2l(1,6,0);c2l(1,7,40);c2l(1,13,10);c2l(1,14,1);c2l(1,15,40);//A0:A1:
    c2l(0,5,10);c2l(0,6,2);c2l(0,7,40);c2l(0,13,10);c2l(0,14,3);c2l(0,15,40);//A2:A3:
    }
    //Display Messege data
    void dispMes(void){
    c2l(2,9,(t0/100000)%10);c2l(2,10,(t0/10000)%10);c2l(2,11,(t0/1000)%10);c2l(2,12,(t0/100)%10);c2l(2,13,(t0/10)%10);c2l(2,14,t0%10);
    //c2l(6,40,(tData[1]/10000)%10+16);c2l(6,41,(tData[1]/1000)%10+16);c2l(6,42,(tData[1]/100)%10+16);c2l(6,43,(tData[1]/10)%10+16);c2l(6,44,(tData[1])%10+16);
    //c2l(8,40,(tData[2]/10000)%10+16);c2l(8,41,(tData[2]/1000)%10+16);c2l(8,42,(tData[2]/100)%10+16);c2l(8,43,(tData[2]/10)%10+16);c2l(8,44,(tData[2])%10+16);
    //c2l(10,40,(tt0/10000)%10+16);c2l(10,41,(tt0/1000)%10+16);c2l(10,42,(tt0/100)%10+16);c2l(10,43,(tt0/10)%10+16);c2l(10,44,(tt0)%10+16);
    //c2l(12,40,(tdin/1000)%10+16);c2l(12,41,(tdin/100)%10+16);c2l(12,42,(tdin/10)%10+16);c2l(12,43,(tdin)%10+16);
    //c2l(4,11,(tt[0])%10+16);c2l(6,11,(tt[1])%10+16);c2l(8,11,(tt[2])%10+16);
    }
    //Chinese
    void disHz(void){
    int i,j,k=0;
    for(i=0;i<2;i++){
      for(j=5;j<20;j+=2){
       h2l(4-(i*2+1),j,k);
       if(k>10){k=0;}else{k++;}
      }
    }
    }
    //ASCII
    void disAsc(void){
    int i,j,k=0;
    for(i=0;i<4;i++){
      for(j=5;j<21;j++){
       c2l(3-i,j,k);
       if(k>39){k=0;}else{k++;}
      }
    }
    }
    //Delayer
    void DelayMs(int counter){
    int i,j;
    for(i=0;i<counter;i++){for(j=0;j<i;j++){;}}
    }

    主程序main.c
    //102x32 KS0713 BL-LCD Test I/O for SPI
    #include "includes.h"
    #include "lcd.h"

    #define da1 1U
    #define da0 0U

    INT32U t0,tt,k,js,duty,duty1,duty2,speed,js;
    INT16U adcVal,value,value2,value3,dir1,dir2,ctrl,ford,left,right,x,y,z;
    INT8U status0_value;

    //Delayer moster 65536X65535 system clock
    void delay(INT16U count){
    INT16U i,j;              
    for(i=0;i<count;i++){for(j=0;j<i;j++);}            
    }

    //I/O Instial
    void ioInit(void){
    //All IO Clock Enable
    SIM_SCGC5 |=(SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTC_MASK|SIM_SCGC5_PORTD_MASK|SIM_SCGC5_PORTE_MASK);
    //IO Selected
    IO_FUN_SEL(ck,ckPin,da1);//LCD Clock
    IO_FUN_SEL(da,daPin,da1);//LCD Data
    IO_FUN_SEL(cd,cdPin,da1);//Cmd:1=Data & 0=Command
    IO_FUN_SEL(res,resPin,da1);//Reset LCD
    //IO Director
    GPIO_DDR_OUTPUT(ck,ckPin);//LCD Clock
    GPIO_DDR_OUTPUT(da,daPin);//LCD Data
    GPIO_DDR_OUTPUT(cd,cdPin);//Cmd:1=Data & 0=Command
    GPIO_DDR_OUTPUT(res,resPin);//Reset LCD:- Enable*/
    }

    //MAIN Program
    int main(void){
    SystemInit();
    ioInit();
    lcdInit();
    lcdClear();
    dispBase();
    delay(200);
    while(1){
      disAsc();
      t0++;
      delay(4000);
      lcdClear();
      t0++;
      disHz();
      t0++;
      delay(4000);
      lcdClear();
      dispBase();
      dispMes();
      t0++;
      delay(4000);
      lcdClear();
    }
    }
    以上程序拷贝到各自的文件中,include他们就可以正确运行。因为还没有做低功耗测试,所以不给工作电流。上述测试的主频大约为48MHz,将来低功耗测试会采用主频低于24MHz或采用RTC时钟——32768Hz。附带KS0713LCD资料。
    照片如下:


    显示点阵ASCII

    显示点阵ASCII

    显示点阵中文

    显示点阵中文

    屏幕暂时布局

    屏幕暂时布局

    LCD100X32_KS0713_技术参数.pdf

    579.4 KB, 下载次数: 1, 下载积分: 威望 1

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-9-1 21:50:30 | 显示全部楼层
    这个屏带背光吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-19 12:05
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    78

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    387
    最后登录
    2025-6-19
    发表于 2016-9-1 22:55:18 | 显示全部楼层
    666666666666666666
    今天好开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-9-2 07:58:30 | 显示全部楼层
    lising 发表于 2016-9-1 21:50
    这个屏带背光吗?

    不带背光,为了低功耗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7519
    最后登录
    2021-8-30
    发表于 2016-9-2 08:09:50 | 显示全部楼层
    支持楼主继续发帖
    nxp.png
    nxpp.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-27 20:36
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    47

    帖子

    0

    注册会员

    Rank: 2

    积分
    102
    最后登录
    2016-12-4
    发表于 2016-10-20 20:20:03 | 显示全部楼层
    支持!谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-10-20 21:10:18 | 显示全部楼层
    zhjb1 发表于 2016-9-2 07:58
    不带背光,为了低功耗

    是的,本身没有背光,属于反光型的,非常省电,可以拿IO口做电源操作,毫无问题.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-10-20 21:10:44 | 显示全部楼层
    lising 发表于 2016-9-1 21:50
    这个屏带背光吗?

    不带背光
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-3 01:38 , Processed in 0.095576 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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