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

📄 mobiao.c

📁 自己编得屏程序包括字库和显示16*32数字
💻 C
字号:
//铜桦LCM IC:ST7920 测试程序,使用周立功的DP-51+实验板,CPU:P 89C52X2BN,晶振频率:11.0592
//连线图:DB0~7--P1.0~7, RS--P3.0,RW--P3.1,E--P3.2,REST--P3.4,(PSB--P3.3 本实验接VCC)

/*如果LCD是20引脚,那么第15脚为PSB串行、并行方式选择,L为串行,H为并行
如果LCD是16引脚,那么就要通过焊接LCD背面的PSB跳线实现串行、并行方式的选择*/

/*LCD并行方式工作时序
空闲时E=1,MCU对LCD的读写无效
      E 下降前,RS、RW 的数据必须稳定下来
      E 下降时,RS、RW 的数据被LCD接受
      E 下降后,MCU输出DATA数据
      E 上升时,DATA的数据被LCD接受
RW=1时,MCU读LCD
RW=0时,MCU写LCD
RS=0时,MCU读写LCD指令
RS=1时,MCU读写LCD数据*/

/*写数据与写指令不需要考虑基本和扩充指令*/


#include<reg52.h>	//加载头文件
#include <stdio.h>                /* 加载输入输出库函数 */



//定义控制线的I/O引脚
sbit  RESET=P3^4;
//sbit  PSB=P3^3;
sbit    E=P3^2; 
sbit    RW=P3^1;
sbit    RS=P3^0;

#define uint unsigned int        //定义函数缩写类型
#define uchar unsigned char 

//字库定义
uchar code strsx[]={
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
uchar code strsl[]={"速率: ml/h "};		//LEIL需要打0x0d补丁如含有“数” 标点是16*16除去:
/*--  文字:  8  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=8x16   --*/
uchar code str0[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00};
uchar code str1[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x07,0xC0,0x0F,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x00,0x00};
//uchar code str2[]={0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00};
//uchar code str3[]={0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00};
//uchar code str4[]={0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00};
//uchar code str5[]={0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00};
//uchar code str6[]={0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00};
//uchar code str7[]={0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00};
uchar code str8[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x38,0x0F,0xF0,
0x07,0xE0,0x07,0xE0,0x0F,0xF0,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00};
//uchar code str9[]={0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00};
uchar code strd[16]={0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00}; 


//函数定义										   
void initialize (void);   //初始化函数(全屏数据清零)
void wrtins (uchar i);    //写指令函数
void wrdata (uchar d);   //写数据
void wrp(uchar q,uchar w,uchar i,uchar j,uchar m[]);	   //q w 为y x 坐标	  i为行象素/8  j为列象素
void asame (uchar i);		//写一样函数
void delay (uint x);      //延时函数



//函数开始
void main(void){
uchar i;
initialize();
asame(0x00);
wrtins(0x30);
wrtins(0x80);        //写DDRAM地址,第一行
for(i=0;i<6;i++){
  wrdata(strsl[i]);
 }
wrtins(0x90);		   //第二行
for(i=6;i<12;i++){
  wrdata(strsl[i]);
 }
wrtins(0x34);
wrp(0x80,0x83,2,32,str0);
wrp(0x80,0x84,2,32,str8);
wrp(0x98,0x85,2,8,strd);
wrp(0x80,0x86,2,32,str1);
wrtins(0x36);
while(1);
}


void initialize(void){
  RESET=0;              //LCM复位信号有效
  delay(20);            //延时
  RESET=1;              //LCM复位信号无效
  wrtins(0x38);
  delay(20);
  wrtins(0x38);
  delay(20);
  wrtins(0x01);
  delay(20);
  wrtins(0x02);
  delay(20);
  wrtins(0x06);				 //AC加一
  delay(20);
  wrtins(0x0c);				 //显示开 游标关  游标闪关
  delay(20);
}


void wrtins (uchar i)    //入口参数为要写的指令的低8位
{
  RS=0; 
  RW=0; 
  P1=i;
  E=0; 
  delay(1);
  E=1;
  //delay(1);
  P1=0xff;
}

void wrdata(uchar d)
{
  RS=1;
  RW=0;
  P1=d;
  E=0;
  delay(1);
  E=1;
  P1=0xff;
}


void wrp(uchar q,uchar w,uchar i,uchar j,uchar m[])		 //q w 为y x 坐标	   i为行象素/8  j为列象素
{  uchar u,t,s,o;  
 for(u=0;u<j;u++){
    s=q+u;
   wrtins(s);
   wrtins(w);   
   for(t=0;t<i;t++){
     o=t+i*u;      
	wrdata(m[o]);
   }
 }
}

void asame (uchar i)
{uchar u,t,s;
   for (u=0;u<32;u++){
   wrtins(0x36);
   s=0x80+u;
   wrtins(s);
   wrtins(0x80);
   for(t=0;t<20;t++){
    wrdata(i);
   }
 }

}


void delay (uint x)    //入口参数控制延时的长短
{
  uchar k;
  while(x--){
    for(k=0;k<125;k++)
         {;}
    }
}

⌨️ 快捷键说明

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