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

📄 3.c

📁 电子钟程序
💻 C
字号:
#include <AT89X51.H>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uint fen=0;
uint miao=0;
uint shi=0;
uchar count,num,k,temp=0xfe;
keyvar();
xianshi();
//165引脚定义********************
sbit  pl=P3^6;    //锁位
sbit  clk2=P3^7;  //165时钟
sbit  chu=P3^5;   //输出
sbit dat=P1^0;    //定义驱动74595的数据脚为p1.0
sbit clk=P1^1;    //74595的时钟
sbit lat=P1^2;    //栓锁
sbit  gw=P1^3;    //个位显示控制脚
sbit  sw=P1^4;    //十位
sbit  bw=P3^3;    //百位
sbit  qw=P3^4;    //千位

uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//数据表
uchar table2[]={ 0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF};
void delay(uchar t)                          //延时1MS程序
  {
    uchar i;
    for(i=0;i<100;i++)
     for(;t>0;t--);
  }
//**************************74HC595显示程序*****************************
dsout(unsigned char j)
{
 unsigned char i;
  for(i=0;i<8;i++)
    {
     dat=j&0x80;       //高位在前
     clk=1;
     clk=0;
     j<<=1;
    }
    lat=1;
    lat=0;               //锁存
}
//*************分调时加1程序****************
keyon()
{
  if(num==0xfe)//判断S1是否按下
  {
    TR0=0;
     ET0=0;
    fen++;
    /*dsout(table2[fen%10]);         //位处理
     gw=0;
     delay(10);
     gw=1;
     dsout(table1[fen/10]);
     sw=0;
     delay(10);
     sw=1;*/
    if(fen>59) fen=0,shi++;
    keyvar();
     while(num==0xfe){keyvar();xianshi();}//再次判断按键是否按下
        
    }
/*}
//***********************分调时减1程序*****************************
/*keyjian()
{*/
  if(num==0xfd)//判断S2是否按下
  {
    TR0=0;
     ET0=0;
    fen--;
    /*dsout(table2[fen%10]);
     gw=0;
     delay(10);
     gw=1;
     dsout(table1[fen/10]);
     sw=0;
     delay(10);
     sw=1;*/
    if(fen>59||fen<0) fen=59;
    keyvar();
     while(num==0xfd){keyvar();xianshi();}//再次判断按键是否按下
    }
/*}
//*************时调时加1程序****************
keyjian()
{*/
  if(num==0xfb)//判断S3是否按下
  {
    TR0=0;
     ET0=0;
    shi++;
   /* dsout(table2[shi%10]);         //位处理
     bw=0;
     delay(10);
     bw=1;
     dsout(table1[shi/10]);
     qw=0;
     delay(10);
     qw=1;*/
    if(shi>24) shi=0;
    keyvar();
     while(num==0xfb){keyvar();xianshi();}//再次判断按键是否按下
        
    }
/*}
//*************时调时减1程序****************
/*keyjian()
{*/
  if(num==0xf7)//判断S4是否按下
  {
    TR0=0;
     ET0=0;
    shi--;
    /*dsout(table2[shi%10]);         //位处理
     bw=0;
     delay(10);
     bw=1;
     dsout(table1[shi/10]);
     qw=0;
     delay(10);
     qw=1;*/
    if(shi>23||shi<0) shi=23;
    keyvar();
     while(num==0xf7){keyvar();xianshi();}//再次判断按键是否按下
        
    }
}
//************74HC165数据处理程序****************************************
keyvar(void)
{
   uchar ee;
  pl=0;
   pl=1;
   for(ee=0;ee<8;ee++)//165在PL有一个脉冲后就输出0位数据
    {
      k=k<<1;
     if(chu)k++;
      clk2=0;
        clk2=1;    
    }
     num=k;
}
//来回显示*****************************
xianshi(void)
{
    dsout(table1[fen%10]);//个位显示0~9
     gw=0;
    delay(10);//延时处理
     gw=1;
     dsout(table1[fen/10]);//十位显示0~6
    sw=0;
    delay(10);
     sw=1;
     dsout(table2[shi%10]);//百位显示0~9
     bw=0;
     delay(10);
     bw=1;
     dsout(table1[shi/10]);//千位显示0~6
     qw=0;
     delay(10);
     qw=1;
     
}
timer0() interrupt  1  //中断入口
 {
   TH0=0x4c;
   TL0=0x00;
   count++;
   P0=temp;
   
   if(count==20)//中断20次,实现1秒脉冲,即50MS*20=1S
    {
      count=0;
temp=_crol_(temp,1);
     miao++;
     if(miao>59)
       {
        miao=0;
        fen++;
        if(fen>59)
          {
           fen=0;
		   shi++;
		   if(shi>24)
		    {
		      shi=0;
		    }
           }
       }
    }
}
     

void main()
{
  TMOD=0x01;//确定定时器工作方式1
  EA=1;/////允许中断
  ET0=1;
  TR0=1;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  while(1)
   {

    keyvar();  //按键处理
    keyon();//调分加1
     /* keyjian(); *///调分减1
	  
	  
	   xianshi();
	 

    TR0=1;//设定时器与调时同步
     ET0=1;
    
   }    
}

⌨️ 快捷键说明

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