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

📄 1602.c

📁 基于51单片机设计的用1602 显示数字钟 频率计 歌曲
💻 C
📖 第 1 页 / 共 2 页
字号:
/*==============================================================*/
/*※※※※※※※※※※※※※系统主文※※※※※※※※※※※※※※*/                   
/*==============================================================*/
#include <at89x51.h>	

#include "ds1302.c"
#include "frequence.c"
#include "song.c"
/////////////////////////////////
#define LCM_RS P0_6
#define LCM_RW P0_5            //定义LCD引脚
#define LCM_E  P0_4
#define LCM_Data P2
#define key1 P1_0
#define key2 P1_1
#define key3 P1_2
#define key4 P1_3
#define key5 P1_4
/////////////////////////////////

#define Busy 0x80             //用检测LCM状态
#define uchar unsigned char
void WriteDataLCM(unsigned char WDLCM);//
void WriteCommandLCM(unsigned char WCLCM,BuysC);//
unsigned char ReadDataLCM(void);//
unsigned char ReadStatusLCM(void);//
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//
void display(uchar sec,uchar min,uchar hrs,uchar dte,uchar mon,uchar day,uchar yr);//(sec,min,hour,date日期,mon,day星期,year)
void LCMInit(void);//
void Delay5Ms(void);//
void Delay400Ms(void);//
void disp_clk_regs(void);
void Locatexy(char x,char y);//
uchar time_add(uchar i);
//////////////////////////////////////////////////
void function_choose(void);
void time_set(void);
void clock_set(void);
void clock_close(void);
void frequence();
void ele_source ();
void function_choose2();
void Timer();
void Swatch();
/*void Song();
void Ding_fre();
void Ding_ring();
void Ding_fre0();
void Ding_Stopw();*/


//////////////////////////显示字符几及asc码////////////////////////////////////////////// 
//unsigned char data shuzi[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};    //asc(0~9)
unsigned char code date[] = {"Date:"};
unsigned char code time[] = {"Time:"};
unsigned char code aa[]={":"};
unsigned char code bb[]={"."};
unsigned char code c[]={"C"};
//unsigned char code gn1 [] = {"Time:1.SHOW2.SET"};
//unsigned char code gn2 [] = {"Clok:1.SHOW2.SET"};
unsigned char code zf[7][8] = {"Second:","Minite:","Hour--:","Date--:","Mone--:","Year--:","Day---",};
unsigned char clock=0;
unsigned char clk[2];    //存储时间设置信息
//uchar D1_choose ;
//uchar D0_choose ;
uchar mh0,mh1,mm0,mm1,ms0,ms1;
//******************************
    //延时子程序      //**
void delay(unsigned int win)//** 
{          //**
unsigned int n;      //**
n=0;         
while(n < win)      
{n++;}        
    
}        
void feng_ring()
{
P0_0=!(P0_0);
Delay400Ms();
P0_0=!(P0_0);
}
//////////////////////////////键盘程序/////////////////////////////////////////////////

void dely(void)
{uchar i=50;
 while(i--);
}
uchar kscan (void)
{  uchar i=0;
 if(P1!=0xff)
   { dely();
         if (key1==0) i=1;
    else if (key2==0) i=2;
    else if (key3==0) i=3;
    else if (key4==0) i=4;
	else if (key5==0) i=5;
    while(P1!=0xff);     //消抖      
   }
    return i;       //返回键值
}

///////////////////////////////主程序///////////////////////////////////////////////////
void main(void)
{uchar G=0,S=0,key=0;

 Inital:Delay400Ms();        //启动等待,等LCM讲入工作状态
 initialize_DS1302a();//(0x32,0x24,0x23,0x14,0x02,0x03,0x07); 
 LCMInit();           //LCM初始化
 Delay5Ms(); 
  while(1) 
 {
  DisplayListChar(0,0,"N0.1");
  DisplayListChar(6,0,"N0.2");
  DisplayListChar(12,0,"N0.3");
  DisplayListChar(0,1,"Time");
  DisplayListChar(6,1,"Fre");
  DisplayListChar(12,1,"V/A");
   G=3;S=0;
   Locatexy(G,S); 
  while(1)
  {key=kscan();
   if(key==4)
         { if(G==3)
           { G=9;Locatexy(G,S); }      
	       else if(G==9)
           { G=15 ;Locatexy(G,S); } 
		   else if(G==15)
           { G=3 ;Locatexy(G,S); } 
		   
         }   
    
    else if(key==1)
         {  if(G==15) 
           { G=9;Locatexy(G,S); }      
	        else if(G==9)
           { G=3;Locatexy(G,S); }
 		    else if(G==3)
           { G=15;Locatexy(G,S); }
          } 
       else if(key==5)
	        break;
   }
     if(G==3)  { G=S=0;function_choose();if(key==5)goto Inital;}   
	  else if(G==9) { G=S=0; frequence();goto Inital; }  
	  else if(G==15)  { G=S=0; ele_source ();goto Inital;}   
	  
  } 
 }
////////////////////////////////主函数/////////////////////////////////////

/*===================闹钟功能选择======================*/
void function_choose(void)
{ uchar G=0,S=0,key=0;
  T_inital: LCMInit();          
 Delay5Ms();
 while(1)             //功能选择
 { DisplayListChar(0, 0,"Time:1.Show2.SET");  //时间显示以及时间设置
   DisplayListChar(0, 1,"Clok:1.Clos2.SET");  //时间显示以及闹钟设置
   G=0;S=0;
   Locatexy(G,S); 
  while(1)                     //设置并移动光标
   {key=kscan();
   if(key==4)
         { if(G==0)
           { G=5;Locatexy(G,S); }
           else if(G==5)
           { G=11;Locatexy(G,S); }      
	       else if(G==11)
           {function_choose2();goto  T_inital; } 
		   
         }   
   
    else if(key==1)
         { if(G==11)
           { G=5;Locatexy(G,S); }
           else if(G==5)
           { G=0;Locatexy(G,S); }      
	        
         }  
    else if(key==2||key==3)
         {  if(S==0) 
           { S=1;Locatexy(G,S); }      
	        else if(S==1)
           { S=0;Locatexy(G,S); } 
         }
	 else if(key==5)
	        break;
   }
           if (G==0) break;
           if(G==5&&S==0)  { G=S=0;disp_clk_regs();goto T_inital;}   //时间显示
	  else if(G==11&&S==0) { G=S=0;time_set();goto T_inital; }   //时间设置
	  else if(G==5&&S==1)  { G=S=0;clock_close();goto T_inital;}   //时间显示
	  else if(G==11&&S==1) { G=S=0;clock_set(); goto T_inital;   }  //闹钟设置

  }
}
void function_choose2()
{
  uchar G=0,S=0,key=0;
  T2_inital: LCMInit();          
   Delay5Ms();
  while(1)             
 { DisplayListChar(0, 0,"NO.1"); 
   DisplayListChar(6, 0,"NO.2"); 
   DisplayListChar(12, 0,"NO.3"); 
   DisplayListChar(0, 1,"Timer"); 
   DisplayListChar(6, 1,"StopW");  
   DisplayListChar(12, 1,"Song");  
   G=0;S=0;
   Locatexy(G,S); 
   while(1)
   {key=kscan();
   if(key==4)
         { if(G==0)
           { G=3;Locatexy(G,S); }
           else if(G==3)
           { G=9;Locatexy(G,S); }      
	       else if(G==9)
           {G=15;Locatexy(G,S); } 
		   }  
   else if(key==1)
         { if(G==15)
           { G=9;Locatexy(G,S); }
           else if(G==9)
           { G=3;Locatexy(G,S); }      
	       else if(G==3)
           {G=0;Locatexy(G,S); } 
		   else if (G==0) break;
		   } 
 	else if(key==5)break;
   }
     if (G==0) break;
     if(G==3)  { G=S=0;Timer();if(key==5)goto T2_inital;}   
	  else if(G==9) { G=S=0; Swatch();goto T2_inital; }  
	  else if(G==15)  { G=S=0;Song();goto T2_inital;}  
 }
}

void Swatch()
{uchar G=3,S=0,key=0;
EA=1;TMOD=0X10;ET1=1;TR1=0;
TL1=(0xffff-10000)&0xff;
TH1=(0xffff-10000)>>8;
 Locatexy(G,S); 
mh1=0;mh0=0;mm1=0;mm0=0;ms1=0;ms0=0;
D1_choose=1; 

 LCMInit();          
 Delay5Ms();
 DisplayListChar(3, 0,"StopWatch"); 
  while(1)
  {  key=kscan();
   DisplayOneChar (4,1,shuzi[mh1]);
   DisplayOneChar (5,1,shuzi[mh0]);
   DisplayOneChar (6,1,aa[0]);
   DisplayOneChar (7,1,shuzi[mm1]);
   DisplayOneChar (8,1,shuzi[mm0]);
   DisplayOneChar (9,1,aa[0]);
   DisplayOneChar (10,1,shuzi[ms1]);
   DisplayOneChar (11,1,shuzi[ms0]);
   if(TR1==0&&(key==1||key==2))
   {TR1=1;}
   else if(TR1==1&&(key==1||key==2))
   {TR1=0;}
   else  if(TR1==0&&(key==4||key==3))
   {mh1=0;mh0=0;mm1=0;mm0=0;ms1=0;ms0=0;}
   if (key==5)break;
  }
}
void Ding_Stopw()
{
 TL1=(0xffff-10000)&0xff;
 TH1=(0xffff-10000)>>8;
 ms0++;
 if(ms0==10)
  {ms0=0;ms1++;
   if (ms1==10)
    {ms1=0;mm0++;
     if (mm0==10)
       {mm0=0;mm1++;
       if (mm1==6)
         {mm1=0;mh0++;
		 if(mh0==10)
		 { mh0=0;mh1++;}
		 if (mh0==0&&mh1==10)
		 {mh0=0;mh1=0;}
		}
     }
   }
 
 }

}
/************************* LCD 时钟显示函数 *****************************/
void disp_clk_regs() 
{	uchar sec, min, hrs, dte, mon, day, yr;	
    uchar key=0;
    P3_0=1;
	LCMInit();              //LCD清屏
    DisplayListChar(0, 0, date);//显示"Date:"
    DisplayListChar(0, 1, time);//显示"Time:"
while(1)					// 读取并显示时钟寄存器的内容
	{	
		reset_3w();
		wbyte_3w(0xBF);		// 以多字节突发方式读取时钟数据
		sec = rbyte_3w();	// 秒
       	min = rbyte_3w();	// 分
		hrs = rbyte_3w();	// 小时        
		dte = rbyte_3w();	// 日期        
		mon = rbyte_3w();	// 月份        
		day = rbyte_3w();	// 星期      
		yr  = rbyte_3w();	// 年
		reset_3w();
		   
 	display(sec, min, hrs, dte, mon, day, yr);
	       if(clock==1)
			{DisplayOneChar(15, 1, c[0]); //显示闹钟标志"C"
				if(hrs==clk[0]&&min==clk[1])
				{
				feng_ring();		
				}
               else if(min=!clk[1])
					P0_0=0;
			}
         key=kscan();
		if(key==5) break;	 	   	

⌨️ 快捷键说明

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