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

📄 keydisp.c

📁 DS1302 18B20程序第一版
💻 C
字号:
#include "KeyDisp.h"
#include "DS1302.h"

volatile unsigned char mode=0;	 //模式选择 0、显示时分 1、显示月日 2、显示温度 
volatile unsigned char change=0; //允许修改 0、禁止修改 1、允许修改
volatile unsigned char ajust=0;	 //改变的段位选择 0、前两位(mode=0为时;mode=1为月) 1、后两位(mode=0为分;mode=1为日)

extern volatile char datetime[];
extern volatile char wendu[];

code unsigned char seg[13]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,0xf7,0xf0,0xFF}; //0,1,2,3,4,5,6,9,-,°,熄灭
code unsigned char w[4]={0x7F,0xBE,0xDF,0xEF};  //位选,依次从左到右1、2、3、4


void delay(unsigned int i)
{
  unsigned char j;
  while(i-- !=0)
  {
    for(j=0;j<120;j++);
  }
}


void beep(unsigned int t)
{
  spk=0;
  delay(t);
  spk=1;
  delay(1);
}

unsigned char read_keys()
{
  unsigned char keys;
  P0 = 0xff;
  keys = P0;
  return (keys);
}


void KeyProcess()
{
  unsigned char key,keymode,keyset,keyup,keydown;
  key = read_keys();
  if(key!=0xff)
  {
   delay(110);
   key = read_keys();
   if(key!=0xff)
   {
     beep(100);
	 keymode = key & 0x08;
	 keyset  = key & 0x04;
	 keyup   = key & 0x02;
	 keydown = key & 0x01;

	 if((keymode==0)&&(keyset!=0))  //key1键按下
	 {
	   mode++;
	   if(mode>=3) mode=0;
	 }

	 if((keyset==0)&&(keymode!=0))	//key2键按下
	 {
	   if(ajust==0)	 ajust=1;
	   else ajust=0;
	 }

	 if((keymode==0)&&(keyset==0))	//key1和key2同时按下
	 {
	   if(change==0) change=1;
	   else change=0;
	 }

	 if(keyup == 0)  //key3键按下
	 {
	   if((change==1)&&(mode==0)&&(ajust==0)) //模式0,小时++
	   {
	     datetime[2]++;
	     if(datetime[2]>=24) datetime[2]=0;
	     datetime[2]=datetime[2]/10*16+datetime[2]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x84,datetime[2]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==1)&&(ajust==0))  //模式1,月++
	   {
	     datetime[4]++;
	     if(datetime[4]>12) datetime[4]=0;
	     datetime[4]=datetime[4]/10*16+datetime[4]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x88,datetime[4]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==0)&&(ajust==1)) //模式0,分++
	   {
	     datetime[1]++;
	     if(datetime[1]>=60) datetime[1]=0;
	     datetime[1]=datetime[1]/10*16+datetime[1]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x82,datetime[1]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==1)&&(ajust==1))  //模式1,日++
	   {
	     datetime[3]++;
	     if(datetime[3]>31) datetime[3]=1;
	     datetime[3]=datetime[3]/10*16+datetime[3]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x86,datetime[3]);
	     write_DS1302(0x8e,0x80);
	   }
	   
	 }

	 if(keydown == 0) //key4键按下
	 {
	   if((change==1)&&(mode==0)&&(ajust==0)) //模式0,小时--
	   {
	     datetime[2]--;
	     if(datetime[2]<0) datetime[2]=23;
	     datetime[2]=datetime[2]/10*16+datetime[2]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x84,datetime[2]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==1)&&(ajust==0))  //模式1,月--
	   {
	     datetime[4]--;
	     if(datetime[4]<1) datetime[4]=12;
	     datetime[4]=datetime[4]/10*16+datetime[4]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x88,datetime[4]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==0)&&(ajust==1)) //模式0,分--
	   {
	     datetime[1]--;
	     if(datetime[1]<0) datetime[1]=59;
	     datetime[1]=datetime[1]/10*16+datetime[1]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x82,datetime[1]);
	     write_DS1302(0x8e,0x80);
	   }

	   if((change==1)&&(mode==1)&&(ajust==1))  //模式1,日--
	   {
	     datetime[3]--;
	     if(datetime[3]<1) datetime[3]=31;
	     datetime[3]=datetime[3]/10*16+datetime[3]%10;
	     write_DS1302(0x8e,0x00);
	     write_DS1302(0x86,datetime[3]);
	     write_DS1302(0x8e,0x80);
	   }
	 }
	 
   }
  }
} 

void display()
{
   switch(mode)
   {
      case 0:	   //HR:Min
       {
  	     P3=w[0];P1=seg[datetime[2]/10];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[1];P1=seg[datetime[2]%10]&0xdF;delay(1);P1=0xFF;P3=0xFF;
	     P3=w[2];P1=seg[datetime[1]/10];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[3];P1=seg[datetime[1]%10];delay(1);P1=0xFF;P3=0xFF;
	     break;
       }
      case 1:	   //MOUTH:DATE
       {
         P3=w[0];P1=seg[datetime[4]/10];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[1];P1=seg[datetime[4]%10]&0xdF;delay(1);P1=0xFF;P3=0xFF;
	     P3=w[2];P1=seg[datetime[3]/10];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[3];P1=seg[datetime[3]%10];delay(1);P1=0xFF;P3=0xFF;
	     break;
       }
      case 2:	  //温度
       {
         P3=w[0];P1=seg[wendu[0]];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[1];P1=seg[wendu[1]]&0xDF;delay(1);P1=0xFF;P3=0xFF;
  	     P3=w[2];P1=seg[wendu[2]];delay(1);P1=0xFF;P3=0xFF;
	     P3=w[3];P1=seg[11];delay(1);P1=0xFF;P3=0xFF;
	     break;
       }
      
   }
  
}

⌨️ 快捷键说明

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