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

📄 washing.c

📁 学单片机时好友开发的个人觉得很不错的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define unint unsigned int
#define w_c_add XBYTE[0x2070]  //LCD写命令地址
#define w_d_add XBYTE[0x2071]  //LCD写数据地址
#define r_s_add XBYTE[0x2072]  //LCD读状态字地址
#define r_d_add XBYTE[0x2073]  //LCD读数据地址
#define A8279COM XBYTE[0X2021]  //8279状态命令口地址
#define A8279IND XBYTE[0x2020]  //8279数据口地址
#define A0809 XBYTE[0x2037]  //0809通道0的地址
uchar idata plus[9]={0x02,0x06,0x04,0x0C,0x08,0x09,0x01,0x03,0x00};/*正转控制时序表*/
uchar idata minus[9]={0x03,0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x00};/*反转控制时序表*/
uchar idata w_number[10]={"0123456789"};    /*数库*/
uchar xdata w_begin[]   ={"  自动洗衣机    "};
uchar xdata w_beselect[]={"  开始使用请0  "};
uchar xdata w_wel1[]  ={"  ★欢迎使用★ "};
uchar xdata w_wel2[]  ={"    制造  小仙    "};
uchar xdata w_limit[] ={"  选择水位级别00"};
uchar xdata w_style[] ={"  选择工作方式00"};
uchar xdata w_time[]  ={"  选择漂洗次数00"};
uchar xdata w_fun1[]   ={"设定 0:- 1: + "};
uchar xdata w_fun2[]   ={"确认:2 返回:3 "};
uchar xdata w_fun3[]   ={"自动0;轻洗1;弱2 "};
uchar xdata w_endset[] ={"  功能选择完毕! "};
uchar xdata w_left[]   ={"剩余00秒钟      "};
uchar xdata w_wtin[]   ={"水位控制:  上水"};
uchar xdata w_wtout[]  ={"水位控制:  脱水"};
uchar xdata w_wtover[] ={"    上水完毕    "};
uchar xdata w_xidi[]   ={"当前状态:洗涤  "};
uchar xdata w_qx[]     ={"当前状态:强洗  "};
uchar xdata w_qix[]    ={"当前状态:轻洗  "};
uchar xdata w_rx[]     ={"当前状态:弱洗  "};
uchar xdata w_jp[]     ={"当前状态:浸泡  "};
uchar xdata w_xd[]     ={"当前状态:洗涤  "};
uchar xdata w_px[]     ={"当前状态:漂洗  "};
uchar xdata w_shg[]    ={"当前状态:甩干  "};
uchar xdata w_workend[]={"  谢谢使用!   "};
uchar xdata w_workpause[]={"    暂停使用   "};	                 
uchar xdata w_workclr[]={"    继续使用!   "};	             /*字库*/     
uchar bdata status; /* 可位寻址片内数据存储器,允许位与字节混合访问 */
sbit busy=status^7;                   /*“忙”线的第7位*/
uchar idata *run,*runplus,*runminus; /*定义指针变量,控制电机位置,存储位置*/
sbit wtcon=P3^0;                      /*控制指示灯,表示控制进水开关*/
sbit alarm=P3^1;                    /*水位蜂鸣报警*/
uchar idata limit;                  /*存储水位限制值*/
uchar idata vol;                    /*用于存储ADC0809采样值*/
uchar idata add;                     /*用于LCD的显示*/
uchar idata style;                /*用于选择方式控制*/
uchar idata time;               /*控制漂洗次数*/
uchar idata scale;               /*水位级别*/
uchar idata step=0,flag=0;        /*设置标志位*/
uchar idata start=0;           /*洗衣开始控制位*/
uchar idata pause=0;            /*结束标志位*/

/************************************************************************************************
*       函数原形:void delay(void) ;
*       功    能:延时。
*************************************************************************************************/
void delay(void)                 /*延时子程序*/
{
   uchar j;
   for(j=0;j<20;j++){;}
}

/************************************************************************************************
*       函数原形:void delay1ms(unint x);
*       功    能:延时函数延时1ms。
*************************************************************************************************/
void delay1ms(unint x)     /*延时1ms子程序     6MHz晶振*/
{
  unsigned char i;
  while(x>0)
  {
  x--;
  for(i=0;i<60;i++){i=i;}
  }
}

/************************************************************************************************
*       函数原形:void lcd_busy(void);
*       功    能:检测LCD状态是否处于忙状态。
*************************************************************************************************/
void lcd_busy(void)   /*LCD忙状态检测函数 */
{
	do 
	{
  	  status=r_s_add;  /* 读状态字地址的第7位 */
	}	
	while(busy);
}

/************************************************************************************************
*       函数原形:void lcd_init();
*       功    能:对LCD进行初始化。
*************************************************************************************************/
void lcd_init()          /*LCD初始化*/
 {               
    lcd_busy();
	w_c_add=0x30;   /* 功能设置:8位数据 */
	lcd_busy();     
	w_c_add=0x0C;   /* 显示状态:整体显示,游标位置无效*/
	lcd_busy();
	w_c_add=0x01;   /* 清除显示:将DDRAM填满“20H”,并且设定DDRAM的地址计数器到“00”*/
	lcd_busy();
	w_c_add=0x02;   /* 地址归位:设定DDRAM的地址计数器到“00”,将游标移到开头原点位置 */
}


/************************************************************************************************
*       函数原形:void lcd_clr();
*       功    能:对LCD进行清屏处理。
*************************************************************************************************/
void lcd_clr()     /*LCD清除程序*/
{ 
        
	lcd_busy();
	w_c_add=0x01;

} 

/************************************************************************************************
*       函数原形:display_lcd(uchar www[16],uchar row);
*       功    能:设置LCD的显示。
*************************************************************************************************/
void display_lcd(uchar www[16],uchar row)/*主要的显示函数*/
{
	uchar i;
	add=row;             /* 设置显示坐标 */   
	lcd_busy();
	w_c_add=add;        /* 送数据 */
	for(i=2;i<16;i++)
	{
		lcd_busy();
		w_d_add=www[i];   /* 写数据*/
	}    
  
}


/************************************************************************************************
*       函数原形:void work_end(void);
*       功    能:设置LCD结束画面的显示。
*************************************************************************************************/
void work_end(void)                    /*结束画面*/
{
      display_lcd(w_workend,0x90);  
      delay1ms(100);               
}

/************************************************************************************************
*       函数原形:void work_pause(void);
*       功    能:设置LCD暂停画面的显示。
*************************************************************************************************/
void work_pause(void)            /*暂停画面*/
{
      display_lcd(w_workpause,0x90); 
      delay1ms(100);                
}

/************************************************************************************************
*       函数原形:key_end(void) interrupt 2 using 1 ;
*       功    能:停止处理中断服务程序。
*************************************************************************************************/
void key_end(void) interrupt 2 using 1    /*停止返回处理*/
{
	pause=1; 
	 
	                          /*置标志位*/
}


/************************************************************************************************
*       函数原形:key_end(void) interrupt 0 using 0 ;
*       功    能:停止处理中断服务程序。
*************************************************************************************************/
void key_dis(void)interrupt 0 using 0  /*中断内按键处理*/  
{
 uchar key;
 key=A8279IND;
 key=key&0X0f;
 if(key==10) { do{work_pause();}while(!pause);pause=0;}
   else 
 {
 switch(step)
  {
 case 0:                        /*开机使用选择*/
     {
     switch(key)
         {
          case 0:start=1;
          case 1:break;
          case 2:break;
          case 3:break;
          default:break;     
         } 
      break;
     }
 case 1:                        /*上水等级控制*/
     {
     switch(key)
         {
          case 0:{if(scale==0)scale=2;else scale--;break;}
          case 1:{if(scale==2)scale=0;else scale++;break;}
          case 2:step=2;break;
          case 3:step=0;start=0;break;
          default:break;     
         } 
      break;
     }
 case 2:                      /*洗涤工作方式控制*/
    {
     switch(key)
         {
          case 0:{if(style==0)style=2;else style--;flag=style;break;}
          case 1:{if(style==2)style=0;else style++;flag=style;break;}
          case 2:step=3;break;
          case 3:step=1;break;
          default:break;      
         } 
      break;
    } 
 case 3:                     /*漂洗次数控制*/
    {
     switch(key)
         {
          case 0:{if(time==0)time=5;else time--;break;}
          case 1:{if(time==5)time=0;else time++;break;}
          case 2:step=4;break;
          case 3:step=2;break;
          default:break;     
         } 
      break;
    } 
 case 4:                     /*参数设定控制*/
    {
     switch(key)
         {
          case 0:break;
          case 1:break;
          case 2:step=5;break;
          case 3:step=3;break;
          default:break;     
         } 
      break;
    } 
default:break; 
  }
 }
}

/************************************************************************************************
*       函数原形:void begin(void ;
*       功    能:进入开机界面,进行洗衣选择。
*************************************************************************************************/
void begin(void)
{
 lcd_clr();                             
 display_lcd(w_begin,0x90);             
 display_lcd(w_beselect,0x88);      /*是否使用的选择*/
 if(start==1)
 {
 	display_lcd(w_wel1,0x90);    /*欢迎*/
    display_lcd(w_wel2,0x88);
    step=1;
    delay1ms(2000);           
 }

⌨️ 快捷键说明

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