⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 金鹏LCD驱动
💻 C
字号:
//////////////////////////////////////////////////////////////////////////////
 //程序方式的串口,用来驱动LCD,IOB15为数据,IOB14为同步时钟。
//一个字节分为两次传输,先传输起始字节,5个1为开始标志,其后为RW,RS
//接口函数有
//lcd_init_usual(),作用是常用初始化液晶,无入口,无出口中
//chinese_series();作用是输出汉字串16x16,参量为字串的指针
//code_write();    参量为命令字。
//data_write();    参量为要写入的数或字母16x8,用ASC||码做参数。
//================================================
//用户指令集:
//清除显示:01     
//地址归零:02
//点设定:  04 整体显示不移动,光标左移,AC自动减1
//          05 整体显示不移动,光标右移,AC自动加1
//          06 写入时整体显示向右移动,
//          07 整体显示向左移动。
//显示状态:08 关闭整体显示,关闭光标,光标位置不反白闪烁
//          0C 开启整体显示,关闭光标,光标位置不反白闪烁
//          0D 开启整体显示,关闭光标,光标位置反白闪烁
//          0E 开启整体显示,开启光标,光标位置不反白闪烁     
//          0F 开启整体显示,开启光标,光标位置反白闪烁
//光标或显示移位控制:
//          10 光标左移,AC减1
//          14 光标右移,AC加1 
//          18 整体显示,向左移动,光标跟随,AC不变
//          1C 整体显示,向右移动,光标跟随,AC 不变
//功能设定:20 4 BIT 控制口,基本指令集 
//          24 4 BIT 控制口,扩充指令集
//          30 8 BIT 控制口,基本指令集
//          34 8 BIT 控制口,扩充指
//////////////////////////////////////////////////////////////
#include "SPCE061v004.h"
#define code_start  0xf800
#define data_start  0xfa00

////////////////////////////////////////////////
///命令区定义;
//设定显示地址;
#define row1_line1  0x0080 
#define row1_line2  0x0081
#define row1_line3  0x0082
#define row1_line4  0x0083
#define row1_line5  0x0084
#define row1_line6  0x0085
#define row1_line7  0x0086
#define row1_line8  0x0087
#define row2_line1  0x0090
#define row2_line2  0x0091
#define row2_line3  0x0092
#define row2_line4  0x0093
#define row2_line5  0x0094
#define row2_line6  0x0095
#define row2_line7  0x0096
#define row2_line8  0x0097
#define row3_line1  0x0088
#define row3_line2  0x0089
#define row3_line3  0x008a
#define row3_line4  0x008b
#define row3_line5  0x008c
#define row3_line6  0x008d
#define row3_line7  0x008e
#define row3_line8  0x008f
#define row4_line1  0x0098
#define row4_line2  0x0099
#define row4_line3  0x009a
#define row4_line4  0x009b
#define row4_line5  0x009c
#define row4_line6  0x009d
#define row4_line7  0x009e
#define row4_line8  0x009f
//状态设定
#define lcd_clear      0x0001
#define lcd_addres_0   0x0002;
//////////////////////////////////////
//public lcd_init_usual();
//public chinese_series();
//public code_write();
//public data_write();
//public set_position();
//============================================
//******************************************************************************
extern unsigned int msec ,sec ,min,hor;               //毫秒,秒,分,小时变量  



//*******************************************************************************

 int lcd_init_usual()
 {
   init_iob_out();
   code_write(1);
   code_write(0x000e);
   code_write(0x0006);
 }
 
//=========================================== 
 void init_iob_out()
 {
    *P_IOB_Dir|=0xc000;
    *P_IOB_Attrib|=0xc000;
    *P_IOB_Data&=0x3fff;
 }
 
//===========================================
 int set_position( position)
 int position;
  {
   code_write(position);
  }
  
//=========================================
 int chinese_series(series)
    int *series;
   {
     for(series;*series!=0;series++)
     data_write(*series);
   }
//========================================   
   
 int code_write(code) 
 int code;
  {
    int i,j;
    code=code<<8;
    i=j=code;
    i&=0xf000;
    j=j<<4;
    j&=0xf000;
    byte_write(code_start);
    byte_write(code_start);
    byte_write(i);
    byte_write(j);
  }  
  
 //================================
  
 int data_write(data)
 int data;
 {
    int i,j;
    
    data=data<<8;
    i=j=data;
    i&=0xf000;
    j=j<<4;
    j&=0xf000;
    byte_write(data_start);                   //启始字符
    byte_write(data_start);
    byte_write(i);
    byte_write(j);
 } 
   
///////////////////////////////////////
   
 int   byte_write(byte)
     int byte;
   {
     int x=byte,i,r;
     for(i=0;i<=7;i++)
       {
         r=*P_IOB_Data;
         r&=0x3fff;                    // 最高2位B14,B15清零        
         x=byte;
         x&=0x8000;
         r|=x;
         *P_IOB_Data=r;
         *P_IOB_Data|=0x4000;
         byte=byte<<1;
       }
     
   }
////////////////////////////////////////////////////// 
void lcd_display(void)
{
  set_position(0x0088);
  data_write(((hor&0xf0)>>4)+0x30);  //显示小时
  data_write((hor%10)+0x30);
  
  set_position(0x008a);
  data_write((min/10)+0x30);  //显示分钟
  data_write((min%10)+0x30);
  
  set_position(0x008c);
  data_write((sec/10)+0x30);  //显示秒
  data_write((sec%10)+0x30);
  
  set_position(0x008e);
  data_write((msec/10)+0x30);  //显示毫秒
  data_write((msec%10)+0x30);
  //LCD显示
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -