×
单片机 > 单片机程序设计 > 详情

51单片机自动打铃C语言程序

发布时间:2020-09-03 发布时间:
|

    51单片机自动打铃C语言程序:


#include "reg51.h"

#include "intrins.h" #define uchar unsigned char #define uint unsigned int 

uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段//

uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式

uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式显示段//

uchar Scan_BIT;//位选择//

uchar DSY_IDX;//段选择//

uchar Key_State; //按键控制//

uchar s,s100,h1 ; 

char  h,m;

sbit dd=P1^7; //喇叭和led输出端口//

sbit cc=P1^6;

sbit ss=P1^5; //时间和秒转换显示键//

void DelayMS(uchar x)

{

  uchar i;

  while(x--) for(i = 0;i<120;i++);

  }

void Increase_Hour()

  {

     if (++h>23) h=0;

DSY_BUFFER[0] =DSY_CODE[h/10];

DSY_BUFFER[1] =DSY_CODE[h];

}

void Decrease_Hour()

  { h--;

     if (h<0) h=23;

DSY_BUFFER[0] =DSY_CODE[h/10];

DSY_BUFFER[1] =DSY_CODE[h];

}

void Increase_Minute()

  {

     if(++m>59)

{

  m=0;Increase_Hour();

  }

DSY_BUFFER[3] =DSY_CODE[m/10];

    DSY_BUFFER[4] =DSY_CODE[m];

}

void Decrease_Minute()

  {   m--;

     if(m<0)   m=59; 

DSY_BUFFER[3] =DSY_CODE[m/10];

    DSY_BUFFER[4] =DSY_CODE[m];

}  

void Increase_Hour1()

  {

     if (++h1>7) h1=1;

DSY_BUFFER[6] =DSY_CODE[h1/10];

DSY_BUFFER[7] =DSY_CODE[h1];

}

void Increase_Second()

  {

     if(++s>59)

{

  s=0;Increase_Minute();

  }

DSY_BUFFER1[0] =DSY_CODE[s/10];

    DSY_BUFFER1[1] =DSY_CODE[s];

}

  void T0_INT() interrupt 1 //显示屏显示//

  {

    TH0=(65536-1000)/256;

TL0=(65536-1000)%6;

if(ss==1)  //P1.5键没按下,显示时间//

{

P3=Scan_BIT;

P2=~DSY_BUFFER[DSY_IDX];

}

else { //P1.5键按下,闪//

P3=Scan_BIT;

P2=~DSY_BUFFER[DSY_IDX];

   }

Scan_BIT=_crol_(Scan_BIT,1);//位显示移动//

DSY_IDX=(DSY_IDX+1)%8; //段选择每次变化//

if(h1==3)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==6&m==15)cc=dd=0; else cc=dd=1;

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==0)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==18&m==45)cc=dd=0;  else cc=dd=1;

if(h==19&m==30)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0;  else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

if(h1==1|h1==4|h1==2|h1==5)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==0)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==18&m==45)cc=dd=0;  else cc=dd=1;

if(h==19&m==30)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0;  else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

  if(h1==6)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==21&m==0)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0;  else cc=dd=1;

if(h==22&m==30)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

if(h1==7)

{ if(h==6&m==30)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==11&m==30)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==15&m==30)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0;  else cc=dd=1;

if(h==18&m==40)cc=dd=0; else cc=dd=1;

if(h==20&m==0)cc=dd=0;  else cc=dd=1;

if(h==20&m==30)cc=dd=0;  else cc=dd=1;

if(h==21&m==30)cc=dd=0;  else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

  

  }

void T1_INT() interrupt 3//时间秒自动加一,走时//

{

 TH1=(65536-50000)/256;

 TL1=(65536-50000)%6;//延时50毫秒//

 if (s100==20)

 { 

   s100=0;

Increase_Second();

      }

else s100++;

}

void main ()

{

 P2=P3=0xFF;

 TMOD=0x11;

 TH0=(65536-1000)/256;

 TL0=(65536-1000)%6;

 TH1=0XDC;

 TL1=0;

 TCON=0x01;

 EA=1;

 ET0=1;

 ET1=1;

 h=05,m=55,s=s100,h1=1;  //时间和闹钟初值//

 DSY_BUFFER[0]=DSY_CODE[h/10];   //时间初值赋给时间段码显示组//

 DSY_BUFFER[1]=DSY_CODE[h];

 DSY_BUFFER[3]=DSY_CODE[m/10];

 DSY_BUFFER[4]=DSY_CODE[m];

 DSY_BUFFER[6]=DSY_CODE[h1/10];

 DSY_BUFFER[7]=DSY_CODE[h1];

 DSY_BUFFER1[0]=DSY_CODE[h1/10]; //闹钟初值赋给闹钟段码显示组//

 DSY_BUFFER1[1]=DSY_CODE[h1];

 Scan_BIT=0xFE;  //给位选择赋初值为二进制数 11111110,即只有最后一位为低电平,之后每次左移一位,依次为11111101,11111011......01111111,11111110循环移动//

 DSY_IDX=0; //段码显示组的选择变量//

 TR0=TR1=1;

 Key_State=0xFF;

 while(1)

 {

   if (P1^Key_State) //判断按键是否有按下//

{

  DelayMS(10);

  if (P1^Key_State)

  { 

    Key_State=P1; EA=0;

if((Key_State&0x01)==0) Increase_Hour();   //小时加一//

else if ((Key_State&0x02)==0) Decrease_Hour();   //小时减一//

   else if ((Key_State&0x04)==0) Increase_Minute(); //分钟加一//

else if ((Key_State&0x08)==0) Decrease_Minute(); //分钟减一//

else if ((Key_State&0x10)==0) //复位按键//

{h=05,m=55,s=0,h1=1;

       DSY_BUFFER[0]=DSY_CODE[h/10];

       DSY_BUFFER[1]=DSY_CODE[h];

       DSY_BUFFER[3]=DSY_CODE[m/10];

       DSY_BUFFER[4]=DSY_CODE[m];

       DSY_BUFFER[6]=DSY_CODE[h1/10];

       DSY_BUFFER[7]=DSY_CODE[h1];

}

  else if ((Key_State&0x20)==0)Increase_Hour1(); //模式加一//

  EA=1;

  }

               }

    }

}


关键字:51单片机  自动打铃  C语言程序 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法