字符型12964例程.docx

上传人:b****3 文档编号:5360921 上传时间:2022-12-15 格式:DOCX 页数:12 大小:19.87KB
下载 相关 举报
字符型12964例程.docx_第1页
第1页 / 共12页
字符型12964例程.docx_第2页
第2页 / 共12页
字符型12964例程.docx_第3页
第3页 / 共12页
字符型12964例程.docx_第4页
第4页 / 共12页
字符型12964例程.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

字符型12964例程.docx

《字符型12964例程.docx》由会员分享,可在线阅读,更多相关《字符型12964例程.docx(12页珍藏版)》请在冰豆网上搜索。

字符型12964例程.docx

字符型12964例程

主程序文件:

main.c

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

名   称:

LCD12864_ST7920串行测试程序

试验功能:

测试基于ST7920控制芯片的LCD12864的显示

         串行方式连接;晶振11.0592M

编   写:

JiangX.net

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

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint    //宏定义

/*****LCD接口定义*****/

sbitCS =P2^0;      //片选信号

sbitSID=P2^1;      //串行数据

sbitSCLK=P2^2;      //串行同步时钟

sbitPSB=P2^3;       //串并口选择1:

并口模式;0:

串口模式;

/*****LCD功能初始化指令*****/

#defineCLEAR_SCREEN 0x01   //清屏指令:

清屏且AC值为00H

#defineAC_INIT   0x02   //将AC设置为00H。

且游标移到原点位置

#defineCURSE_ADD  0x06   //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)

#defineFUN_MODE  0x30   //工作模式:

8位基本指令集

#defineDISPLAY_ON  0x0c   //显示开,显示游标,且游标位置反白

#defineDISPLAY_OFF  0x08   //显示关

#defineCURSE_DIR  0x14   //游标向右移动:

AC=AC+1

#defineSET_CG_AC  0x40   //设置AC,范围为:

00H~3FH

#defineSET_DD_AC  0x80

/*****汉字地址表*****/

ucharcodeaddr_tab[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

/*****n(ms)延时子程序*****/

voiddelayms(uintt)     //约延时n(ms)

{

 uinti;

 while(t--)

 {

  for(i=0;i<125;i++);

 }       

}

/*****串行发送一个字节*****/

voidSendByte(ucharDbyte)

{

    uchari;

    for(i=0;i<8;i++)

    {

          SCLK=0;

          Dbyte=Dbyte<<1;       //左移一位

          SID=CY;             //移出的位给SID

          SCLK=1;

          SCLK=0;

    }

}

/*****串行接收一个字节*****/

ucharReceiveByte(void)

{

    uchari,temp1,temp2;

    temp1=0;

    temp2=0;

    for(i=0;i<8;i++)

    {

          temp1=temp1<<1;

          SCLK=0;

          SCLK=1;           

          SCLK=0;

          if(SID)temp1++;

    }

    for(i=0;i<8;i++)

    {

          temp2=temp2<<1;

          SCLK=0;

          SCLK=1;

          SCLK=0;

          if(SID)temp2++;

    }

    return((0xf0&temp1)+(0x0f&temp2));

}

/*****检测LCD忙状态*****/

voidCheckBusy(void)

{

    do  SendByte(0xfc);        //11111,RW

(1),RS(0),0

    while(0x80&ReceiveByte());      //BF(.7)=1Busy

}

/*****写指令*****/

voidLcd_WriteCmd(ucharCbyte)

{

    CS=1;

    CheckBusy();

    SendByte(0xf8);             //11111,RW(0),RS(0),0

    SendByte(0xf0&Cbyte);       //高四位

    SendByte(0xf0&Cbyte<<4);   //低四位(先执行<<)

    CS=0;

}

/*****写数据*****/

voidLcd_WriteData(ucharDbyte)

{

    CS=1;

    CheckBusy();

    SendByte(0xfa);             //11111,RW(0),RS

(1),0

    SendByte(0xf0&Dbyte);       //高四位

    SendByte(0xf0&Dbyte<<4);   //低四位(先执行<<)

    CS=0;

}

/*****初始化LCD*****/

voidLcd_Init(void)

{

   PSB=0;

 delayms(50);

   Lcd_WriteCmd(0x30);       //选择基本指令集

 delayms

(1);

   Lcd_WriteCmd(0x30);         //选择8bit数据流

 delayms

(1);

   Lcd_WriteCmd(0x0c);         //开显示(无游标、不反白)

 delayms

(1);

   Lcd_WriteCmd(0x01);         //清除显示,并且设定地址指针为00H

 delayms(20);

}

/*****显示汉字*****/

voidhanzi_Disp(ucharx,uchary,ucharcode*s)

{

 Lcd_WriteCmd(addr_tab[8*x+y]);  //写地址

 while(*s>0)

   { 

  Lcd_WriteData(*s);    //写数据

  s++;    

   }

}

/*****显示图片(显示Gdram内容)*****/

/*绘图显示的步骤

1关闭绘图显示功能

2先将垂直的坐标(Y)写入绘图RAM地址

3再将水平的位元组坐标(X)写入绘图RAM地址

4将D15-D8写入RAM中

5将D7-D0写入到RAM中

6打开绘图显示功能*/

//图片取模方式:

横向取模,字节正序

voidpic_Disp(uchar*pic)    //显示Gdram内容(显示图片)

{

 ucharx,y,i;

 for(i=0;i<9;i=i+8)

 for(y=0;y<32;y++)

 {

  for(x=0;x<8;x++)

  {

   Lcd_WriteCmd(0x36);   //扩充指令,开绘图显示

   Lcd_WriteCmd(0x80+y);  //行地址

   Lcd_WriteCmd(0x80+x+i);  //列地址

   Lcd_WriteData(*pic++);  //写数据D15-D8

   Lcd_WriteData(*pic++);  //写数据D7-D0

   Lcd_WriteCmd(0x30);

  }

 }

}

/*****整屏显示竖条*****/

//当i=0时显示上面128×32,当i=8时显示下面128×32

//当i=0时显示上面128×32,当i=8时显示下面128×32

voidLcdFill_Vertical()

 ucharx,y,i;

   for(i=0;i<9;i=i+8)  

 for(y=0;y<0x20;y++)

 {    

  for(x=0;x<8;x++)

      {

       Lcd_WriteCmd(0x36);   //扩充指令绘图显示

         Lcd_WriteCmd(y+0x80);      //行地址

         Lcd_WriteCmd(x+0x80+i);    //列地址    

         Lcd_WriteData(0x55);  //写数据D15-D8

         Lcd_WriteData(0x55);  //写数据D7-D0 

     Lcd_WriteCmd(0x30);

      }

 }

}

/*****整屏显示横条*****/

voidLcdFill_Level()

{

  ucharx,y,i;

   uchark;  

   for(i=0;i<9;i+=8)   

      for(y=0;y<0x20;y++)

      {    

   if((y%2)==1)k=0xff;

           elsek=0;

           for(x=0;x<8;x++)

           { 

    Lcd_WriteCmd(0x36);  //扩充指令绘图显示

               Lcd_WriteCmd(y+0x80); //行地址

               Lcd_WriteCmd(x+0x80+i); //列地址           

               Lcd_WriteData(k);

               Lcd_WriteData(k);

        Lcd_WriteCmd(0x30);

           }

      }    

}

/*****整屏充满亮点或暗点*****/

//当i=0时显示上面128×32,当i=8时显示下面128×32

//当i=0时显示上面128×32,当i=8时显示下面128×32

voidLcd_Fill(uchartest)

 ucharx,y,i;

   for(i=0;i<9;i=i+8)  

 for(y=0;y<0x20;y++)

 {    

  for(x=0;x<8;x++)

      {

       Lcd_WriteCmd(0x36);   //扩充指令绘图显示

         Lcd_WriteCmd(y+0x80);      //行地址

         Lcd_WriteCmd(x+0x80+i);    //列地址    

         Lcd_WriteData(test);  //写数据D15-D8

         Lcd_WriteData(test);  //写数据D7-D0 

     Lcd_WriteCmd(0x30);

      }

 }

}

/*****主函数*****/

voidmain(void)

{

 Lcd_Init();

 while

(1)

 {

  Lcd_Init();

  hanzi_Disp(0,0,"ST7920型液晶模块");

  hanzi_Disp(1,1,"串行测试程序");

  hanzi_Disp(2,0,"www.JiangX.net");

  hanzi_Disp(3,3,"");

  delayms(2000);

  Lcd_Init();

 // Lcd_Fill(0xff);

  hanzi_Disp(1,2,"坏点检测");

  delayms(500);

  Lcd_Init();

  Lcd_Fill(0xff);

  delayms(1500);

  

  Lcd_Init();

  LcdFill_Vertical();

  delayms(750);

  Lcd_Init();

  LcdFill_Level();

  delayms(750);

   Lcd_Init();

  hanzi_Disp(1,2,"显示汉字");

  delayms(500);

  Lcd_Init();

  hanzi_Disp(0,0,tangshi);

  delayms(1500);

   Lcd_Init();

  hanzi_Disp(1,2,"显示图片");

  delayms(500);

  Lcd_Init();

  pic_Disp(LCDsheji);

  delayms(1000);  

  

  Lcd_Init();

  pic_Disp(rmb);

  delayms(1000);

   Lcd_Init();

  pic_Disp(qiche);

  delayms(1000);

   Lcd_Init();

  pic_Disp(gongji);

  delayms(1000);

  Lcd_Fill(0x00);      //清显示RAM

  delayms(500);     

 }

}

以下是字库头文件:

ziku.h

unsignedcharcodetangshi[]={"黄河远上白云间,羌笛何须怨杨柳,一片孤城万仞山。

春风不度玉门关。

"};

//图片取模方式:

横向取模,字节正序

unsignedcharcodermb[1024]=

{

                        

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x10,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,0x10,0x00,0x00,0x08,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,0x07,0xFF,0x00,0x04,0xE7,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xC0,0x05,0x34,0xC0,

0x01,0xF8,0x00,0x38,0x7C,0x00,0x70,0x48,0x6C,0x01,0xFF,0xFF,0xE0,0x07,0x1C,0x40,

0x03,0xDD,0x00,0x3E,0x7C,0x30,0x70,0xF8,0x7C,0x0F,0xFF,0xFF,0xF0,0x07,0x1C,0x40,

0x07,0x76,0x00,0x28,0x58,0x5C,0x70,0x50,0x48,0x1F,0xF0,0xFF,0xF8,0x05,0xF7,0x80,

0x07,0xFE,0x00,0x08,0x6C,0x06,0x78,0x5C,0x18,0x1F,0xC0,0x1F,0xFE,0x04,0xEF,0x00,

0x03,0xFE,0x00,0x08,0x04,0x00,0x0C,0x10,0x00,0x3F,0x80,0x07,0xFF,0x00,0x36,0x00,

0x07,0xCE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x07,0xFF,0x00,0xFF,0x00,

0x05,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0x80,0xFF,0x00,

0x02,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x03,0xFF,0x80,0xFF,0x80,

0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0xFF,0x80,0xFF,0x80,

0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xFF,0x80,0xFF,0x80,

0x01,0xF4,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x3C,0x00,0x03,0xFF,0x81,0xFF,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x1F,0x83,0x81,0xFF,0x80,0xF7,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x18,0x43,0x01,0xFF,0x80,0xF7,0x00,

0x00,0x00,0x00,0x00,0x08,0x3E,0x01,0xF0,0x00,0x0C,0x23,0x01,0xFF,0x00,0x7F,0x00,

0x00,0x00,0x00,0x00,0x7C,0xFD,0x87,0x7C,0x00,0x1F,0x23,0xE1,0xFE,0x00,0x7F,0x00,

0x00,0x00,0x00,0x00,0x19,0xC3,0x86,0x1E,0x00,0x16,0x23,0x20,0xF6,0x00,0x32,0x80,

0x00,0x00,0x00,0x00,0x19,0x81,0xCE,0x0F,0x00,0x1C,0x61,0x00,0xEA,0x00,0x5E,0x00,

0x00,0x00,0x00,0x00,0x1B,0x80,0xFC,0x03,0x00,0x10,0xC0,0x00,0xC0,0x00,0x08,0x00,

0x00,0x00,0x00,0x00,0x1D,0x00,0xFC,0x07,0x00,0x11,0xC0,0x01,0xF0,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x19,0x80,0xFC,0x07,0x00,0x18,0x00,0x01,0xE0,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x1F,0x80,0xFC,0x03,0x00,0x18,0x00,0x03,0xC0,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x1B,0x40,0xDE,0x06,0x00,0x18,0xD8,0x01,0xE4,0x00,0x02,0x00,

0x00,0x00,0x00,0x00,0x19,0xE1,0xCF,0x0E,0x00,0x18,0xE0,0x03,0xC4,0x00,0x03,0x80,

0x00,0x00,0x00,0x00,0x18,0xFF,0x97,0xFC,0x00,0x18,0x80,0x07,0xC0,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x3C,0x7F,0x03,0xF8,0x00,0x0D,0x00,0x07,0xC0,0x00,0x03,0x80,

0x00,0x00,0x00,0x00,0x7E,0x38,0x00,0xE0,0x00,0x0D,0xFC,0x03,0xF0,0x00,0x00,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xFE,0x43,0xE0,0x00,0x01,0x00,

0x00,0x00,0x00,0x00,0x00,0x01,0xD8,0x00,0x00,0x0C,0xE0,0x03,0xE0,0x00,0x01,0x00,

0x00,0x00,0x00,0x00,0x00,0x3E,0x7E,0x00,0x00,0x04,0xF0,0x03,0xE0,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0xF6,0x6F,0x00,0x00,0x07,0x80,0x07,0xF0,0x00,0x03,0x80,

0x00,0x00,0x00,0x00,0x06,0xD7,0xD9,0xE0,0x00,0x07,0x80,0x07,0xD0,0x00,0x03,0x00,

0x00,0x00,0x00,0x00,0x0C,0xA9,0x32,0xE0,0x00,0x01,0x80,0x0F,0xD8,0x00,0x01,0x00,

0x00,0x00,0x00,0x00,0x00,0x1A,0x3A,0x80,0x00,0x01,0xC0,0x1F,0xB8,0x00,0x03,0x80,

0x00,0x00,0x00,0x00,0x07,0x52,0x48,0xC0,0x00,0x00,0xFF,0xFF,0x7C,0x00,0x01,0x00,

0x00,0x00,0x00,0x00,0x18,0x2A,0x58,0x04,0x00,0x00,0xFD,0xFC,0xFF,0x00,0x03,0x80,

0x00,0x00,0x00,0x00,0x1B,0x6A,0x78,0x44,0x00,0x01,0xFB,0xF9,0xFF,0xC0,0x00,0x00,

0x00,0x00,0x00,0x00,0x20,0x19,0x9F,0x54,0x00,0x03,0xBD,0x07,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1