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

📄 setter.c

📁 C语言
💻 C
字号:
#include <REG51F020.H>
#include "absacc.h"
#include "lcddata.h"
#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1
#define up    1
#define down  0

//液晶控制
sbit cs = P1^4;
/*---------------------------------------------*/
void init_lcd(void)
{

  uchar data i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<16;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,0x80+j);
      wr_lcd (comm,0x80+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,0);
      wr_lcd (dat,0);
    }
  }
  wr_lcd (comm,0x36);
  wr_lcd (comm,0x30);  /*30---基本指令动作*/ 
  tdelay1ms ();  
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  tdelaynms (10);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  tdelay1ms ();  
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
  tdelay1ms ();  
}
/*------------在某一行显示汉字或字符**********************/
void chn_disp (uchar row, uchar code *chn)//row 行号,chn 要显示的字符串首址
{
  uchar i;
  uchar j;
  switch(row)
  {
     case 1: i=0x80;break;
     case 2: i=0x90;break;
	 case 3: i=0x88;break;
	 case 4: i=0x98;break;
	 default: i=0x80;
  }

  wr_lcd (comm,0x30);
  wr_lcd (comm,i);
  for (j=0;j<16;j++)  // To clear a whole line first
    wr_lcd (dat,0x20);
  wr_lcd (comm,i);
}

/*----------------------反白显示程序--------------------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
//当data1=0xff,data2=0x00时,在x0,y0处前半反白显示8xl*yl.
//当data1=0x00,data2=0xff时,在x0,y0处后半反白显示8xl*yl.
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
  uchar i,j;

  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y0+j);
      wr_lcd (comm,x0+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
  wr_lcd (comm,0x36);
}
//clr gd ram
/*------------------清掉绘图ram中的所有内容------------------*/
void clr_gdram(void) 
{
  uchar i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<16;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,0x80+j);
      wr_lcd (comm,0x80+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,0);
      wr_lcd (dat,0);
    }
  }
  wr_lcd (comm,0x36);
}
/*---------------------------清DDRAM---------------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  tdelay1ms ();  
  wr_lcd (comm,0x01);
  tdelaynms (10);  
  //return;
}
/*-----------------------反白显示子函数------------------------*/
/***************************************************************
注:
  此函数中使用到的全局变量:
    fan_bai_line_bak; 
*****************************************************************/
void fan_bai_sub(uchar row)
{ uchar i,j;
  fan_bai_line_bak=row;
  switch(row)
  {
     case 1: i=0x80,j=0x80;break;
     case 2: i=0x90,j=0x90;break;
	 case 3: i=0x88,j=0x80;break;
	 case 4: i=0x98,j=0x90;break;
	 default: i=0x80,j=0x80;
  }

  con_disp (0xff,0xff,i,j,8,16); 
}

/*-------------向液晶控制器中写指令/数据子函数------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  uchar k;
  cs=1;
  k=0xf8;    //11111000
  if(dat_comm)
    k|=0x2;  //data,rs=1  111110(1/0)0
             //command,rs=0
  SPI0DAT=k;
  while(!SPIF){;}
  SPIF=0;
  k=content;
  k&=0xf0;
  SPI0DAT=k;
  while(!SPIF){;}
  SPIF=0;
  k=content;
  k<<=4;
  k&=0xf0;
  SPI0DAT=k; 
  while(!SPIF){;}
  SPIF=0;  
  cs=0;
}
/*-----------------将数据转换为相应的asc码子函数--------------*/
/***************************************************************
注:
  1.初始化显示当前页的前4条菜单,并且第1条菜单反白显示
如果相关的菜单项有参数,则程序自动搜寻' ',为参数显示做准备
  2.此函数中使用到的全局变量:
  num_asc[];
  3.本函数中使用到的子函数
***************************************************************/
void num2ascii(float num)
{ uchar i;
  char j;
  unsigned long m;
  if(num<0) {bit3=1;num*=-1;}
  else bit3=0;
  if(num<1)          {i=0;m=num*100000+5;} //.00000
  else if(num<10)    {i=1;m=num*10000+5;}  //0.0000
  else if(num<100)   {i=2;m=num*1000+5;}   //00.000
  else if(num<1000)  {i=3;m=num*100+5;}    //000.00
  else if(num<10000) {i=4;m=num*10+5;}     //0000.0
  else               {i=5;m=num+5;}        //00000.
  for(j=4;j>=0;j--)
    {
      num_asc[j]=(uchar)(m%10);
      m/=10;
    }
  for(j=5;j>=i+1;j--)
   {
     num_asc[j]=num_asc[j-1]; 
   }
  for(j=0;j<=5;j++)
   {
     if(j==i) continue;
     num_asc[j]+=0x30;
   }
  num_asc[i]='.';
  num_asc[6]='\0';
}
/*------------------显示开机欢迎界面子函数-------------------*/
//欢迎界面:init_text
void first_page_disp(void)
{
  uchar i,j;
  clrram();
  clr_gdram();
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,init_text[j*16+i]);
  }
}

/*------------------------延时子函数-------------------------*/
void tdelay1ms(void)
{
  uchar i;
  bit j;
  j=EA;        //保存EA状态
  EA=0;
  EA=0;
  TMR3CN = 6;
  do
  {i = TMR3CN;
  }
  while((i&0x80)==0); 
  TMR3CN = 6;
  EA=j;       //恢复EA状态
  EA=j;
}
/*--------------------------------主程序--------------------------------*/
void main()
{
  uchar j,k1=0;
  SP=0x50;//0x5f;      //初始化堆栈指针
  config();            //单片机各寄存器设置
  self_flash_test();   //系统flash自检
  init_lcd();          //初始化液晶控制器

  for(;;)//主循环
    {    }
}

⌨️ 快捷键说明

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