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

📄 2402test.c

📁 时钟是用微控制器
💻 C
📖 第 1 页 / 共 4 页
字号:
void beep_a(void)
{
 beep(250,16,150,40);
}
//------------------扬声器--成功音--------------------------
void beep_y(void)
{
 beep(50,30,100,50);
}
//------------------扬声器--无效音--------------------------
void beep_n(void)
{
 beep(50,80,100,100);
}
****** 扬声器--无效音 *********************************************************/
void beep_n(void)
{
 unsigned int a;              //定义变量用于发声的长度设置
 for(a=100;a>0;a--)           //第一个声音的长度
 {
  Bell_Out=~Bell_Out;         //取反扬声器驱动口,以产生音频
  Delay(100);                 //音调设置延时
 }
 for(a=160;a>0;a--)
 {                            //同上
  Bell_Out=~Bell_Out;
  Delay(80);                  //音调设置延时
 }
 Bell_Out=1;
}
/****** 扬声器--闹钟报警 *******************************************************/
void beep_a(void)
{
 unsigned char a;           //定义变量用于发声的长度设置
 for(a=60;a>0;a--)
 {                          //第一个声音的长度
  Bell_Out=~Bell_Out;       //取反扬声器驱动口,以产生音频
  Delay(100);               //音调设置延时
 }
 for(a=100;a>0;a--)
 {                          //同上
  Bell_Out=~Bell_Out;
  Delay(80);
 }
 for(a=100;a>0;a--)
 {                          //同上
  Bell_Out=~Bell_Out;
  Delay(30);
 }
}
/****** 扬声器--成功音 **********************************************/
void beep_y(void)
{
 unsigned char a;           //定义变量用于发声的长度设置
 for(a=250;a>0;a--)
 {                          //第一个声音的长度
  Bell_Out=~Bell_Out;       //取反扬声器驱动口,以产生音频
  Delay(20);                //音调设置延时
 }
 for(a=100;a>0;a--)
 {                          //同上
  Bell_Out=~Bell_Out;
  Delay(80);
 }
}
/****** 扬声器--按键音 ********************************************************/
void beep_k(void)
{
 unsigned char a;                  //定义变量用于发声的长度设置
 for(a=100;a>0;a--)
 {                                 //声音的长度
  Bell_Out=~Bell_Out;
  Delay(50);                       //音调设置延时
 }
}
//================================纯软件部分=========================================//
//显示项目 时间部分 在第一行全行显示时间
/******************************************************************************************/
void RealTime_Display(void)
{
 print(0x80,"20");
 print2(0x82,(read_clock(0x8d)/16)+0x30);
 print2(0x83,(read_clock(0x8d)%16)+0x30);
 print(0x84,"-");                         // 显示年

 print2(0x85,(read_clock(0x89)/16)+0x30);
 print2(0x86,(read_clock(0x89)%16)+0x30);
 print(0x87,"-");                         // 显示月

 print2(0x88,(read_clock(0x87)/16)+0x30);
 print2(0x89,(read_clock(0x87)%16)+0x30);

 print(0x8a," ^");                        // 显示[
 print2(0x8c,read_clock(0x8b)%16);        // 显示星期
 print(0x8d,"^ ");                        // 显示]

 print2(0x8f,(read_clock(0x85)/16)+0x30); // 显示小时
 print2(0x90,(read_clock(0x85)%16)+0x30);
 print(0x91,":");                         // 显示cgram第一个字模":"

 print2(0x92,(read_clock(0x83)/16)+0x30); // 显示分钟
 print2(0x93,(read_clock(0x83)%16)+0x30);
 print(0x94,":");                         // 显示cgram第一个字模":"

 print2(0x95,(read_clock(0x81)/16)+0x30); // 显示秒
 print2(0x96,(read_clock(0x81)%16)+0x30);

// print(0x8a," ");                       // 在主显示区空白处写入空格 防止乱码
// print(0x8d," ");
 print(0x97," ");
 print(0xc0," ");
}
/********************************************************************************************
//显示项目 定时时间部分 在第一行全行显示时间
********************************************************************************************/
void alarm_Display(void)
{
 print(0x80,"AL");
 print2(0x82,(AT24C02_Read1Byte(0x05+(rom*10))/16)+0x30);
 print2(0x83,(AT24C02_Read1Byte(0x05+(rom*10))%16)+0x30);
 print(0x84,"-");                                         // 显示年

 print2(0x85,(AT24C02_Read1Byte(0x06+(rom*10))/16)+0x30);
 print2(0x86,(AT24C02_Read1Byte(0x06+(rom*10))%16)+0x30);
 print(0x87,"-");                                         // 显示月

 print2(0x88,(AT24C02_Read1Byte(0x07+(rom*10))/16)+0x30);
 print2(0x89,(AT24C02_Read1Byte(0x07+(rom*10))%16)+0x30);

 print(0x8a," ^");                                        // 显示[
 if(AT24C02_Read1Byte(0x08+(rom*10))==0xff)
 {
  print(0x8c,"?");
 }
 else
 {
  print2(0x8c,AT24C02_Read1Byte(0x08+(rom*10))%16);       // 显示星期
 }
 print(0x8d,"^ ");                                        // 显示]

 print2(0x8f,(AT24C02_Read1Byte(0x09+(rom*10))/16)+0x30); // 显示小时
 print2(0x90,(AT24C02_Read1Byte(0x09+(rom*10))%16)+0x30);
 print(0x91,":");                                         // 显示cgram第一个字模":"

 print2(0x92,(AT24C02_Read1Byte(0x0a+(rom*10))/16)+0x30); // 显示分钟
 print2(0x93,(AT24C02_Read1Byte(0x0a+(rom*10))%16)+0x30);
 print(0x94,":");                                         // 显示cgram第一个字模":"

 print2(0x95,(AT24C02_Read1Byte(0x0b+(rom*10))/16)+0x30); // 显示秒
 print2(0x96,(AT24C02_Read1Byte(0x0b+(rom*10))%16)+0x30);

 print2(0xc0,AT24C02_Read1Byte(0x04+(rom*10))/16+0x30);   //显示控制项值 控制项值
 print2(0xc1,AT24C02_Read1Byte(0x04+(rom*10))%16+0x30);
}
/********************************************************************************************
//清屏+刷新显示+延时+清空DT 一体函数
//LRDD()
********************************************************************************************/
void LRDD(void)
{
 LCM2402_Init();
 RealTime_Display();
 DelayS(500);
 DT=0xff;
}
/********************************************************************************************
//清屏+刷新定时值显示+延时+清空DT 一体函数
//LADD()
********************************************************************************************/
void LADD(void)
{
 LCM2402_Init();
 alarm_Display();
 DT=0xff;
}
/********************************************************************************************
//闹钟呜响查寻程序
//BEEPing();
********************************************************************************************/
void BEEPing(void)
{
 uint8 a;
 LADD();
 print(0xc3,"Time is up! AV: Exit");
 for(a=0;a<250&&DT==0xff;a++)
 {
  beep_a();
 }
 DT=0xff;
}
/********************************************************************************************
//闹钟和无线遥控的键值处理
//ALARMing();
********************************************************************************************/
void ALARMing(void)
{
 uint8 alarm_bit;
 alarm_bit=AT24C02_Read1Byte(0x03);              // 从AT24C02的地址0x03读出定时报警设置数据
 if(AT24C02_Read1Byte(0x04+(rom*10))<2&&alarm_bit==1||alarm_bit==3)
 {						 //键值值为0则是闹钟,不为0则是无线控制
  if(AT24C02_Read1Byte(0x04+(rom*10))==0)
  {
   BEEPing();
  }
  else
  {
   beep_y();
  }	
 }
 if(AT24C02_Read1Byte(0x04+(rom*10))==0&&alarm_bit==2||alarm_bit==3)
 {
		//**这里将写入一个或是调用无线遥控键值处理程序**
 }
}
/********************************************************************************************
//定时值校对&处理函数
//search_time() 整个流程必须在1秒里完成,不然将有部分定时值不响应。
********************************************************************************************/    
void search_time(void)
{
 uint8 timeS,s,i;
 static unsigned char data alarmS[25];
 alarm_con=0;
 s=read_clock(0x81);                             //读取秒数据
 for(i=0;i<25;i++)
 {
  alarmS[i]=AT24C02_Read1Byte(0x0B+i*10);        //一次性将全部项目中的秒数据送入数组中
 }
 for(i=0;i<25;i++)
 {
  if(alarmS[i]!=0xff)                            //不为0xff则表示这项已经设置
  {
   alarm_con++;                                  //定时项目个数寄存位
   if(s==alarmS[i])
   {
    timeS=AT24C02_Read1Byte(0x0a+(i*10));
    if(timeS==read_clock(0x83)||timeS==0xff)     //校验 分钟
    {
     timeS=AT24C02_Read1Byte(0x09+(i*10));
     if(timeS==read_clock(0x85)||timeS==0xff)    //校验 小时
     { 
      timeS=AT24C02_Read1Byte(0x08+(i*10));
      if(timeS==read_clock(0x8b)||timeS==0xff)   //校验 星期
      {
       timeS=AT24C02_Read1Byte(0x07+(i*10));
       if(timeS==read_clock(0x87)||timeS==0xff)  //校验 日
       {
        timeS=AT24C02_Read1Byte(0x06+(i*10));
        if(timeS==read_clock(0x89)||timeS==0xff) //校验 月
        {
         timeS=AT24C02_Read1Byte(0x05+(i*10));
         if(timeS==read_clock(0x8d)||timeS==0xff)//校验 年
         {
          rom=i;                                 //走到响应的位置

          ALARMing();                            //闹钟和无线遥控的键值处理
          //这里将调用一个到时的响应程序alarming();
         }
        }
       }
      }
     }
    }
   }
  }
 }
}
/*void temp_reset(void)
{
 uchar i;
 bit flag=0;
 while(~flag)
 {
  DQ=MINUS;
  delay15us(40);
  DQ=PLUS;
  delay15us(4);
  while(DQ&PLUS)
  ;
  while(~(DQ|MINUS))
  {
   flag=1;
   for(i=0;i<25;++i)
   {;}
   break;
  }
 }
 DQ=PLUS;
 return;
}

viod temp_bcd(void)
{
 temp_plus=temp_value;
 if(temp_plus&0xf800)
 gotoxy(2,7);
 display_LCD_string("-");
 temp_minus=abs((int)temp_plus);
 xiaoshu1=(temp_minus&0x000f)*10/16;
 xiaoshu2=(temp_minus&0x000f)*100/16%10;
 xiaoshu=xiaoshu1*10+xiaoshu2;
 temp_minus>>=4;
 temp_value=temp_minus;
 if(temp_minus>=ALARM_TH||temp_minus<ALARM_TL)
 {
  LIGHT=1;
 }
 else
 {
  LIGHT=0;
 }
 else
 {
  xiaoshu1=(temp_plus&0x000f)*10/16;
  xiaoshu2=(temp_plus&0x000f)*100/16%10;
  xiaoshu=xiaoshu1*10+xiaoshu2;
  temp_plus>>=4;
  temp_value=temp_plus;
  if(temp_plus>=ALARM_TH||temp_plus<ALARM_TL)
  {
   LIGHT=1;
  }
  else
  {
   LIGHT=0;
  }
 }
 temp=temp_value;
 return;
}

viod temp_convert(void)
{
 temp_reset();
 temp_write(0xcc);
 temp_write(0x44);
 return;
}

int temp_read(void)
{
 ychar i,j,rbyte;
 rbyte=0;
 for(i=0;i<8;++i)
 {
  DQ=MINUS;
  _nop_;
  _nop_;
  DQ=PLUS;
  delay15us(1);
  j=DQ&PLUS;
  delay15us(4);
  rbyte=(j<<7)|(rbyte>>1);
 }
 _nop_;
 return(rbyte);
}









/********************************************************************************************
//系统主程序 菜单切换
//main()
********************************************************************************************/
void main(void)
{
 beep_a();
 keyboard_int();

⌨️ 快捷键说明

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