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

📄 lcd.c

📁 变压器绕线机源代码, 经过测试,可以正常运作.
💻 C
字号:
//============================
//绕线机程序
//240*64LCD子程序
//============================
#ifndef __LCD_c__
#define __LCD_c__
#include "included.h"
/*==========================
LY-62256SRAM===32K*8
字符区:DISPLAY RAM 0000H-07FFH(2K) 
图形区:DISPLAY RAM 0800H-7FFFH(30K)
===========================*/
void int_lcd(void)
{
  pr_1(0x00,0x00,0x40);//设置文本显示区域首地址 
  pr_1(0x1e,0x00,0x41);//;一行所占字节数30个字符

  pr_1(0x00,0x08,0x42);//设置设置图形显示区域首地址 
  pr_1(0x1e,0x00,0x43);//设置图形显示区域宽度一行所占字节数30个字符

  pr_12(0xa7);       //光标形状设置
  
  pr_12(0x80);       //启动内部字符发生器
                     //;文本与图形以逻辑或的关系合成显示
  
  pr_12(0x9c);    //启动文本显示,启动图形显示

}
//===================
//对LCD显示SRAM全部清零
//==================
void clr_dis_sram(void)
{
  uint i;

  pr_1(0x00,0x00,0x24);//地址指针设置
  pr_12(0xb0);         //数据自动读写设置,进入自动写模式      //

  for(i=0;i<0x8000;i++)  //32k的字节空间
   { 
    st_3();
    d_add = 0x00;       //设置数据通道地址/数据写入入口
      }

  pr_12(0xb3);          //退出自动写模式
}
//===============
//读状态字子程序
//================
uchar r_st(void)
{
  return (c_add);
}
//==============
//判断S1,S0子程序
//==============
void st_01(void)
{
   uchar date_0;
  do
    {
      date_0 = r_st();
      date_0 &=0x03;
     }while(date_0 != 0x03);   
}
//==============
//判断S2子程序
//==============

void st_2(void)
{
 uchar date_0;
  do
    {
      date_0 = r_st();
      date_0 &=0x04;
     }while(date_0 != 0x04); 
 }

//==============
//判断S3子程序
//==============
void st_3(void)
{
 uchar date_0;
  do
    {
      date_0 = r_st();
      date_0 &=0x08;
     }while(date_0 != 0x08); 
 }
/*==========================
;写指令和数据子程序
;-----2个参数------------
===========================*/
void  pr_1(uchar date_1,uchar date_2,uchar com_0)
{
   st_01();
   d_add = date_1; //第一参数单元
  
   st_01();
   d_add = date_2; //取第二参数单元数据

   st_01();
   c_add = com_0;  //写入指令代码 
}

/*==========================
;写指令和数据子程序
;-----1个参数------------
===========================*/
void  pr_11(uchar date_1,uchar com_0)
{
   st_01();
   d_add = date_1; //一参数单元
  
   st_01();
   c_add = com_0;  //写入指令代码 
}

/*==========================
;写指令
;-----0个参数------------
===========================*/
void  pr_12(uchar com_0)
{   
   st_01();
   c_add = com_0;  //写入指令代码 
}
//=========================
//读数据子程序
//==========================
uchar  pr_2(void)
{  
   st_01();
   return ( d_add); //设置数据通道地址/数据写入入口
}
/*=========在LCD上显示图形===============
图形写入子程序(图形方式)
参数说明:
X:在屏幕上水平方向的位置(字节为单位0--30)
Y:在屏幕上垂直方向的位置(像数点为单位0--63)
tim0:表示该图形在屏幕上一行上要显示多小个字节
tim1:表示该图形在屏幕上要显示多小行
tab_add:表的地址位置
=================================*/

void wri_pic(uchar x,uchar y,uchar tim0,uchar tim1,uchar *tab_add)
{
  uint  dis_add;
  uint   cod;
  uchar  *pt;
  uint  temp_pos;  

  pt = tab_add;  //表的地址位置
  dis_add = x+y*0x1e+0x0800;//计算显示RAM的地址

  for(cod =0;cod<tim1;cod++ ) //tim1=图形的行数
     {
      pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
      for(temp_pos=0;temp_pos<tim0;temp_pos++ )//tim0 =图形的列数  
         {
           pr_11(*pt,0xc0);//写指令和数据子程序1个参数
           ++pt; 
          }
      dis_add +=30; //修正显示RAM的地址
       }
}

///*;********在LCD上显示西文字符*********************
//西文字符写入子程序(文本显示)
//参数说明:
//X:水平方向的坐标单位(字节)范围(0-30)240/8
//Y:垂直方向的坐标单位(字节)范围(0-7)64/8
//COD:ASCII码位置在00H-7FH之间,字符代码
// ============================================= */
void wri_c(uchar x,uchar y,uchar cod)
{
   uint  dis_add;

   dis_add = y*0x1e+x;
   pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
   pr_11(cod,0xc0);
}
/*===========在LCD上显示一个西文字符===========
图形方式下显示一个西文字符子程序
X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
Y:显示屏上的第几行(0--63)像数点为单位
cod:该字符在数组中的位置
字体下对应的点阵为:宽x高=8x16 
西文字符写入子程序(图形方式)
=============================*/

void wri_s(uchar x,uchar y,uchar cod,uchar *tab_add)
{
   uint  dis_add;
   uchar count;
   uchar *true_add;
   
   dis_add = y*0x1e+x+0x0800; //0800H OF 30K
   true_add= tab_add+cod*0x10; //西文字符
   
   for(count=0;count<16;count++)
    {
      pr_1(dis_add,dis_add>>8,0x24);
      pr_11(*true_add,0xc0);
      ++true_add;
      dis_add +=30;
    } 
}

/*==========在LCD上显示一个汉字======================
在图形方式下显示一个汉字的子程序
参数说明:
X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
Y:显示屏上的第几行(0--63)像数点为单位
COD:在字模表中定义的要显示的字是哪个(32个字节为单位)
;汉字写入子程序(图形方式)
;y*30+x+0800 = 要显示的RAM地址d2,d1==>y,x
;====================================*/
void wri_cc(uchar x,uchar y,uchar cod,uchar *tab_add)
{
   uint  dis_add;
   uchar count;
   uchar *true_add;

   dis_add = y*0x1e+x+0x0800; //显示地址的偏移设置
   true_add = tab_add+cod *32;//数据在表中的地址    
   for(count=0;count<16;count++)
     {
      pr_1(dis_add,dis_add>>8,0x24);
      pr_11(*true_add,0xc0);
       ++true_add;
      pr_11(*true_add,0xc0);
       ++true_add;
      dis_add +=30;
    } 
}
//;*********在LCD上显示一个点********************
//;绘点子程序(240X64)
/*==========================================
参数说明:
X:显示屏上的水平方向(0--234)像数点为单位
Y:显示屏上的垂直方向(0--63)像数点为单位
============================================*/

void wri_d(void)
{
    uint  dis_add;
    uchar  temp_0;
    dis_add = 5*0x1e+7/8+0x0800;  
    pr_1(dis_add,dis_add>>8,0x24);
    
    temp_0 =7%8;
    temp_0 = 0x07-temp_0;
    temp_0 |=0xf8;   //确定位,相应位为1    
    pr_12(temp_0);
}

//==============文本显示==ASCII码==========================
/*=======显示外部RAM一个地址单元里的值==============
参数说明:8*8
X:水平方向的坐标单位(字节)范围(0-30)240/8
Y:垂直方向的坐标单位(字节)范围(0-7)64/8
tim0:数字位数的1/2数,N为数据的位数
==============================*/
 void dis_dat(uchar x,uchar y,uchar xdata_sram)
{
    uint  dis_add;
    uchar  temp;
 
     dis_add = y*0x1e+x;
     pr_1(dis_add,dis_add>>8,0x24);
         
     temp =xdata_sram;
     temp =temp>>4;
     temp &=0x0f;
     temp |=0x10;   //显示BCD码,如0X79,则屏幕上就显示79
     pr_11(temp,0xc0);

     temp =xdata_sram;
     temp &=0x0f;
     temp |=0x10;
     pr_11(temp,0xc0);  
}
/*====================================== 
读出2汉字并取反后再写入子程序(图形方式)
取反显示,是选中的那2个字,变成空心字,
以表示选中了当前要设置的子项目
=======================================*/
void wri_rd(uchar x,uchar y)
{
    uchar count=0,col=0;
    uint  dis_add;
    uchar temp;

   dis_add=y*30+x+0x0800;//显示地址
     
   for(count=0;count<16;count++)
   {
     pr_1(dis_add,dis_add>>8,0x24);
 
     for(col=0;col<4;col++)
      {
        pr_12(0xc5);//执行一次读操作
        temp=pr_2(); //读数据子程序
        pr_11(~temp,0xc0);//一次写操作
       }      
       dis_add +=30;
     }
}
//==============================
#endif


⌨️ 快捷键说明

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