freetech

HCS08单片机驱动点阵液晶12232实验程序

0
阅读(2861)

1、实验功能介绍

本实验单的IO口控制12232点阵液晶的显示。做本实验时需将拨码开关“SW2”和“SW6”的所有位拨到“ON”位置,“SW4”的第1位(LIGHT位)拨到“ON”位置。

2、流程图

clip_image002

3、实验现象

运行“LCD12232实验”,LCD12232液晶屏幕上轮流显示“飞锐泰克伴您成长 010-62669831”字样和一幅图象,背光每一轮亮灭变化。

4、程序代码:

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "table.h"

#define DATA_PORT PTBD
#define a0 PTCD_PTCD7
#define rw PTCD_PTCD6
#define e2 PTCD_PTCD5
#define e1 PTCD_PTCD4
#define rst PTCD_PTCD3
#define LIGHT PTCD_PTCD2
#define frist_page 0xb8 //页地址设置(0~3)  
#define frist_row   0xc0 //扫描行    (0~31)  
#define frist_line 0x00 //列地址设置(0~61)

uchar R=1,W=0,C=0,D=1;
/*******指令集***********************
do_12232(W,C,1,1,0XAE); //开关屏     +1开
do_12232(W,C,1,1,0XC0); //起始行     0~31
do_12232(W,C,1,1,0XB8); //页地址     0~4
do_12232(W,C,1,1,0X00); //列地址     0~80
do_12232(W,C,1,1,0XB1); //设置方向 正向 B0 为反向
do_12232(W,C,1,1,0XA4); //驱动模式 正常 +1静态
do_12232(W,C,1,1,0XA8); //duty设置 1/16 +1 1/32duty
do_12232(W,C,1,1,0XE0); //R-chang-W
do_12232(W,C,1,1,0XAE); //end
do_12232(W,C,1,1,0XE2); //reset
*////////////////////////////////////////////
void delayus(uint us)     
{
uint uscnt;
uscnt=us>>3;           
while(--uscnt);
}
void delayms(uint ms)    // ms数量级 是实际时间的0.83倍
{
while(--ms)
   {
     delayus(250);
   __RESET_WATCHDOG(); /* feeds the dog */
     delayus(250);
   __RESET_WATCHDOG(); /* feeds the dog */
     delayus(250);
   __RESET_WATCHDOG(); /* feeds the dog */
     delayus(250);
   }
}

void do_12232(uchar RW,uchar DC,uchar chceE1,uchar chceE2,uchar date)
{
a0=DC;
rw=RW;
DATA_PORT=date;
if(chceE1){e1=1;e1=0;}
if(chceE2){e2=1;e2=0;}
}

void init_lcd (void)
{
rst=1;
do_12232(W,C,1,1,0xe2); //软件复位
do_12232(W,C,1,1,0xa4); //动态驱动
do_12232(W,C,1,1,0xae); //显示关闭
do_12232(W,C,1,1,0xa9); //刷新时钟设置1/32
do_12232(W,C,1,1,0xa0); //clockwise
do_12232(W,C,1,1,0xee); //写模式
do_12232(W,C,1,1,0xaf); //显示打开   
}
/*///////清屏///////////////*/////////////////
void clear_screen()
{
uchar i,ii;
for(i=0;i<4;i++)
    {
do_12232(W,C,1,1,frist_page+i);
do_12232(W,C,1,1,frist_row);
do_12232(W,C,1,1,frist_line);
for(ii=0;ii<61;ii++)
     {
   do_12232(W,D,1,1,0);
   }
}
}
///////////任意位置写7*16的像素块////////////////////////
/*
每半屏的一页只能写8个字符空余5列        
x 横向x=0第一行 x=2 第二行       
y 列向y=0~16  
*/
///////////////////////////////////////////////////////////
/*
加 do_12232(W,C,1,0,frist_row);是必要的的,每个像素都是在顶层
产生的,每写半屏的长度执行它可以通过滚屏达到指定的地点  
*/
void write_one_char(uchar x,uchar y,uchar *cha)
{
uchar i,ii;
for(ii=0;ii<2;ii++)                          //上下半屏分写    
    {
if(y/8)                                 //左右半屏分写                                     
     {
   do_12232(W,C,0,1,frist_page+x+ii);   //值页
   do_12232(W,C,0,1,frist_row+8*x);   //扫描
   do_12232(W,C,0,1,frist_line+7*(y-8));//值列
   for(i=0;i<7;i++)
      {
    do_12232(W,D,0,1,cha[7*ii+i]);
    }
   do_12232(W,C,0,1,frist_row);   //执行滚屏

   }
else
     {
   do_12232(W,C,1,0,frist_page+x+ii);
   do_12232(W,C,1,0,frist_row+8*x);
   do_12232(W,C,1,0,frist_line+7*y+5);   
   for(i=0;i<7;i++)
      {
    do_12232(W,D,1,0,cha[7*ii+i]);
      }
   do_12232(W,C,1,0,frist_row);
     }
}
}

///////////////////////////////////////////////////////////////////
/*
写任意像素15*16到指定位置
*/
void write_one_chinese(uchar x,uchar y,uchar *cha)
{
uchar i,ii;
for(ii=0;ii<2;ii++)                          //上下半屏分写    
    {
if(y/4)                                 //左右半屏分写                                     
     {
   do_12232(W,C,0,1,frist_page+x+ii);   //值页
   do_12232(W,C,0,1,frist_row+8*x);   //扫描
   do_12232(W,C,0,1,frist_line+15*(y-4));//值列 ?
   for(i=0;i<15;i++)
      {
    do_12232(W,D,0,1,cha[15*ii+i]);
    }
   do_12232(W,C,0,1,frist_row);   //执行滚屏

   }
else
     {
   do_12232(W,C,1,0,frist_page+x+ii);
   do_12232(W,C,1,0,frist_row+8*x);
   do_12232(W,C,1,0,frist_line+15*y);   
   for(i=0;i<15;i++)
      {
    do_12232(W,D,1,0,cha[15*ii+i]);
      }
   do_12232(W,C,1,0,frist_row);
     }
}
}
//////////////////////////////////////////////////////////////////
/************任意位置写字符串************************************/
void write_chars(uchar x,uchar y,uchar *cha,uchar quantity)
{
uchar i;
for(i=0;i<quantity;i++)
{
write_one_char(x,y+i,cha+14*i);
}
}
/************任意位置写数字************************************/
void write_num(uchar x,uchar y,uchar number)
{
  write_one_char(x,y,num[number]);
}
/************任意位置写一串数字************************************/
void write_nums(uchar x,uchar y,uchar *number,uchar quantity)
{
  uchar i;
  for(i=0 ; i<quantity ; i++) {
    write_one_char(x,y+i,num[*number]);
    number++;
  }
}

/***********任意位置写汉字串************************************/
void write_characters(uchar x,uchar y,uchar *cha,uchar quantity)
{
uchar i;
for(i=0;i<quantity;i++)
{
write_one_chinese(x,y+i,cha+30*i);
}
}
/***********整屏122*32画一幅画************************************/
/*
如果数据是从上至下有序下沉则每次不必置
do_12232(W,C,0,1,frist_row);
*/
void display_piture(uchar *cha)
{
uchar i,ii;
for(i=0;i<4;i++)
    {
     do_12232(W,C,1,1,frist_page+i);
     do_12232(W,C,1,1,frist_row);
     do_12232(W,C,1,1,frist_line);
for(ii=0;ii<122;ii++)
     {
      if(ii<61){do_12232(W,D,1,0,cha[122*i+ii]);}
   else{do_12232(W,D,0,1,cha[122*i+ii]);}
   }
}   
}

//============================
//函数名:Init_io初始化I/O
//作用:初始化I/O
//输入参数:无
//返回参数:无
//=============================
void Init_io(void)

    //io初始值都为0
    PTBD = 0xFF;
  PTCD_PTCD2=1;
  PTCD_PTCD3=1;
  PTCD_PTCD4=1;
  PTCD_PTCD5=1;
  PTCD_PTCD6=1;
  PTCD_PTCD7=1;
    //io为输出
    PTBDD = 0xFF;
  PTCDD_PTCDD2=1;
  PTCDD_PTCDD3=1;
  PTCDD_PTCDD4=1;
  PTCDD_PTCDD5=1;
  //PTCDD_PTCDD6=1;
  PTCDD_PTCDD7=1;
    //高驱动强度
    /*
    PTBDS = 0xFF;
  PTCDS_PTCDS2=1;
  PTCDS_PTCDS3=1;
  PTCDS_PTCDS4=1;
  PTCDS_PTCDS5=1;
  PTCDS_PTCDS6=1;
  PTCDS_PTCDS7=1;
  */

}
////////////////////////////////////////////////////////////////////
void main()
{
Init_io();
init_lcd();
clear_screen();
write_chars(0,3,num,8);
write_chars(2,3,num,8);
while(1)
      {
    LIGHT = !LIGHT; //背光每一轮亮灭变化
    clear_screen();
       (0,0,num,10);
    delayms(5000);

    clear_screen();
       write_characters(0,0,free_tech,8);
       write_nums(2,2,tel,12);
    delayms(5000);
       clear_screen();
       display_piture(logo);
    delayms(5000);
   }

}

 

//table.h 文件     注入flash(code)的数据表

//字模"0123456789"
unsigned char const num[11][14]={
        0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0"*/
        0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1"*/
        0x00,0x70,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x2C,0x22,0x21,0x30,0x00,/*"2"*/
        0x00,0x30,0x08,0x88,0x88,0x70,0x00,0x00,0x18,0x20,0x20,0x31,0x1E,0x00,/*"3"*/
        0x00,0x80,0x40,0x20,0xF8,0x00,0x00,0x06,0x05,0x04,0x24,0x3F,0x24,0x04,/*"4"*/
        0x00,0xF8,0x08,0x88,0x88,0x08,0x00,0x00,0x19,0x21,0x20,0x31,0x1F,0x00,/*"5"*/
        0xE0,0x10,0x88,0x88,0x88,0x18,0x00,0x0F,0x11,0x20,0x20,0x31,0x1F,0x00,/*"6"*/
        0x00,0x38,0x08,0x08,0xE8,0x18,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,/*"7"*/
        0x70,0x98,0x88,0x08,0x98,0x70,0x00,0x1E,0x21,0x21,0x21,0x31,0x1E,0x00,/*"8"*/
        0xF0,0x08,0x08,0x08,0x18,0xE0,0x00,0x31,0x22,0x22,0x32,0x19,0x07,0x00,/*"9"*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"-"*/
};

/*-- 一幅图像: --*/
/*-- 宽度x高度=122x32 --*/
unsigned char const logo[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0xA0,
0xE0,0x60,0x20,0x00,0x00,0x50,0xF0,0x50,0x00,0xB8,0xF8,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x01,0x01,0x01,0x01,0x00,0x18,0x38,0x39,0x3D,0x1F,0x19,0x01,0x01,0x10,0xBB,0x3F,
0x33,0x12,0x00,0x32,0xFF,0x36,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0x98,0x26,0x62,
0x00,0x00,0x00,0x0C,0xD7,0xF2,0x52,0x00,0x7D,0xC5,0x44,0x67,0x3C,0x00,0x00,0x00,
0x91,0xD5,0xF5,0x3D,0x57,0x15,0x35,0xD5,0x95,0x90,0x00,0x00,0x02,0x02,0x7A,0xCA,
0xCA,0xCF,0xCA,0x4A,0x7A,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x06,0x0F,0x0F,0x07,0x07,0x03,0x80,0xC2,0xE7,0xEF,0xC7,
0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x0C,0x06,0x00,0x00,0x00,0x00,0x07,
0x02,0x0C,0x06,0x01,0x00,0x0C,0x08,0x04,0x00,0x00,0x01,0x04,0x02,0x0A,0x0D,0x03,
0x03,0x06,0x04,0x00,0x00,0x00,0x08,0x08,0x04,0x06,0x00,0x00,0x0F,0x08,0x08,0x0C,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char const free_tech[]=
{
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 飞
; 宽×高(像素): 15×16
------------------------------------------------------------------------------
*/
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xA2,0x10,0x18,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x41,0x83,0x60,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 锐
; 宽×高(像素): 15×16
------------------------------------------------------------------------------
//宽的像素数,高的像素数,宽的字节数,参数设置可选
*/
0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF1,0x12,0x14,0x10,0x14,0x12,0xF9,0x10,
0x00,0x02,0x02,0x7F,0x22,0x92,0x40,0x31,0x0F,0x01,0x01,0x3F,0x41,0x41,0x70,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 泰
; 宽×高(像素): 15×16
------------------------------------------------------------------------------
*/
0x40,0x44,0x54,0x54,0x54,0xD4,0x74,0x5F,0x54,0xD4,0x54,0x54,0x56,0x44,0x40,
0x04,0x04,0x02,0x22,0x13,0x54,0x88,0x7F,0x08,0x14,0x13,0x22,0x04,0x0C,0x04,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 克
; 宽×高(像素): 15×16
------------------------------------------------------------------------------
*/
0x04,0x04,0x04,0xE4,0x24,0x24,0x24,0x3F,0x24,0x24,0x24,0xF4,0x24,0x06,0x04,
0x00,0x80,0x80,0x47,0x22,0x1E,0x02,0x02,0x02,0x7E,0x82,0x87,0x80,0x80,0xE0,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 伴
; 宽×高(像素): 15×16
------------------------------------------------------------------------------*/
0x00,0x80,0x60,0xF8,0x07,0x20,0x24,0x28,0x20,0xFF,0x20,0x28,0x24,0x20,0x00,
0x01,0x00,0x00,0xFF,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x03,0x02,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 您
; 宽×高(像素): 15×16
------------------------------------------------------------------------------*/
0x40,0x20,0x10,0xFC,0x23,0x10,0x8C,0x67,0x04,0xF4,0x04,0x44,0x94,0x8C,0x00,
0x40,0x30,0x00,0x77,0x80,0x81,0x88,0x92,0xB4,0x83,0x80,0xE0,0x00,0x11,0x60,
/*------------------------------------------------------------------------------
; 源文件 / 文字 : 成
; 宽×高(像素): 15×16
------------------------------------------------------------------------------*/
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,
0x40,0x20,0x1F,0x00,0x08,0x10,0x0F,0x40,0x20,0x13,0x1C,0x24,0x43,0x80,0xF0,

/*------------------------------------------------------------------------------
; 源文件 / 文字 : 长
; 宽×高(像素): 15×16
------------------------------------------------------------------------------
0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,0x90,0x88,0x84,0x86,0x80,0xC0,0x80,
0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x23,0x04,0x08,0x10,0x20,0x60,0x20,0x00,*/
0x00,0x80,0x80,0x80,0xFE,0x80,0x80,0xA0,0x90,0x88,0x86,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x3F,0x20,0x10,0x09,0x02,0x04,0x08,0x10,0x20,0x20,0x00
};
unsigned char tel[]={
  0,1,0,10,6,2,6,6,9,9,3,1
};