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

📄 12864并行接口参考程序.txt

📁 ARM7开发源码
💻 TXT
字号:
//12864并行接口参考程序,控制器st7920  
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

//12864 汉字显示模块 与MCU连接

sbit RS = P2^2;// 1:输入数据 ;0:输入命令
sbit RW = P2^3;//1:读数据  0:写数据
sbit E = P2^7;
sbit PSB = P2^5;  //串并口选择 1:并口模式; 0:串口模式;

#define  LcdData P0

//延时子程序
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++);
         
}
//测试LCD忙
bit Check_Busy()
{
    bit busy;
    RS = 0;
    RW = 1;
    E = 1;
      _nop_(); 
    busy = (bit)(LcdData&0x80);
    E = 0;
    return busy;
}
//等待LCD到空闲
void wait()
{
    while(Check_Busy());
}
//写数据
void Lcd_Writedata(unsigned char dispdata)
{  wait();

   RS=1;
   RW=0;
   E=0;
   _nop_();  _nop_();
   LcdData=dispdata;
   E=1;
   _nop_(); _nop_();
   E=0;
}

//写指令代码
void Lcd_WriteCmd(unsigned char cmdcode)
{  wait();
   RS=0;
   RW=0;
 
   E=0;
   _nop_();  _nop_();
   LcdData=cmdcode;
   _nop_(); _nop_();
   E=1;
   _nop_();  _nop_();
   E=0;
}
//初始化LCD
void Lcd_Reset()
{  PSB=1;
   Lcd_WriteCmd(0x30);       //选择基本指令集
   delay(5);
   Lcd_WriteCmd(0x0c);       //开显示(无游标、不反白)
   delay(5);
   Lcd_WriteCmd(0x01);       //清除显示,并且设定地址指针为00H
   delay(5);
   Lcd_WriteCmd(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}

void WriteStr(unsigned char code *s)
{ 
    while(*s>0)
   {  Lcd_Writedata(*s);
      s++;     
   }
}

void hzDisp()
{ 
   Lcd_WriteCmd(0x80);
   WriteStr("黄河远上白云间,");
   Lcd_WriteCmd(0x90);
   WriteStr("一片孤城万仞山。");
   Lcd_WriteCmd(0x88);
   WriteStr("羌笛何须怨杨柳?");
   Lcd_WriteCmd(0x98);
   WriteStr("春风不度玉门关。");
}

/*绘图显示的步骤
 1 关闭绘图显示功能
 2 先将垂直的坐标(Y)写入绘图RAM地址
 3 再将水平的位元组坐标(X)写入绘图RAM地址
 4 将D15-D8写入RAM中
 5 将D7-D0写入到RAM中
 6 打开绘图显示功能*/
//整屏显示竖条
//当ii=0时显示上面128×32,当ii=8时显示下面128×32
void LcdFill_Vertical()
{  unsigned char x,y,ii;
   for(ii=0;ii<9;ii+=8)   
     for(y=0;y<0x20;y++)     
      for(x=0;x<8;x++)
      { 
      Lcd_WriteCmd(0x36);//扩充指令 绘图显示
         Lcd_WriteCmd(y+0x80);        //行地址
         Lcd_WriteCmd(x+0x80+ii);     //列地址     

         Lcd_Writedata(0x55); //写数据 D15-D8 
         Lcd_Writedata(0x55); //写数据 D7-D0  
   Lcd_WriteCmd(0x30);
      } 
}
//当ii=0时显示上面128×32,当ii=8时显示下面128×32

//整屏显示横条线
void LcdFill_Level()
{  unsigned char x,y,ii;
   unsigned char k;   
   for(ii=0;ii<9;ii+=8)    
      for(y=0;y<0x20;y++)
      {     if((y%2)==1)
               k=0xff;
            else
               k=0;
            for(x=0;x<8;x++)
            {  Lcd_WriteCmd(0x36);  //扩充指令 绘图显示
               Lcd_WriteCmd(y+0x80);    //行地址
               Lcd_WriteCmd(x+0x80+ii);    //列地址            
               Lcd_Writedata(k);
               Lcd_Writedata(k);
      Lcd_WriteCmd(0x30);
            }
       }     
} 
void Main()
{  
 
   Lcd_Reset(); //初始化LCD屏
  
   while(1)
   {  
      Lcd_Reset();
   LcdFill_Vertical();               //显示竖条
      delay(6000);delay(4000);delay(4000);
      
  
      Lcd_Reset();
      LcdFill_Level();       //显示横条
      delay(6000);delay(4000);delay(4000);

 
      Lcd_Reset();
   hzDisp(); //显示汉字
      delay(6000); delay(4000);delay(4000);
     
 } 
  
}

⌨️ 快捷键说明

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