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

📄 8279的时钟程序.txt

📁 单片机程序包
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include<at89x52.h>
#include<absacc.h>
#define com XBYTE[0X7F01]
#define dat XBYTE[0X7F00]
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0F8,0x80,0X90,0xf7};
unsigned char table[]={0x00,0x00,0x0a,0x00,0x00,0x0a,0x00,0x00};
unsigned char count,i,temp;
void key1(void);
void key2(void);
void key3(void);
void delay(unsigned char i)
 {while(--i);
  }
void main(void)
 {TMOD=0x01;
  TH0=0x3b;
  TL0=0xb0;
  EA=1;
  ET0=1;
  TR0=1;
  com=0x00;
  com=0x32;
  com=0xdf;
  temp=com;
  while((temp&0x7f)==1);
  while(1)
  {for(i=0;i<8;i++)
     {com=80+i;
   dat=dispcode[table[i]];
   delay(255);
  }
   temp=com;
   if(temp&0x07!=0)
     {temp=dat; 
   switch(dat)
        {case 0xc1:key1();break;
         case 0xc8:key2();break;
         case 0xc9:key3();break;
         default: break;
        }
      }
    }
}
void key1(void)
{table[1]++;
 if(table[1]==9)
  {table[1]=0;
   table[0]++;
  }
 if((table[0]==2)&&(table[1]==4))
  {table[0]=0;
   table[1]=0;
   }
}
void key2(void)
{table[4]++;
 if(table[4]==9)
  {table[4]=0;
   table[3]++;
  }
 if((table[3]==5)&&(table[4]==9))
  {table[3]=0;
   table[4]=0;
   }
}
void key3(void)
{table[7]++;
 if(table[7]==9)
  {table[7]=0;
   table[6]++;
  }
 if((table[6]==5)&&(table[7]==9))
  {table[6]=0;
   table[7]=0;
   }
}
void t0(void) interrupt 1
 {count++;
  TH0=0x3b;
  TL0=0xb0;
  if(count==20)
     {count=0;
      key3();
      if((table[6]==5)&&(table[7]==9))
        {key2();
         if((table[3]==5)&&(table[4]==9))
           key3();
        }
      }
  }
=================================================


#include <reg51.h>
#include <intrins.h>

unsigned char data dis_digit;
unsigned char key_s, key_v;

unsigned char code dis_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表
unsigned char data dis_buf[8];
unsigned char data dis_index;
unsigned char hour,min,sec;
unsigned char sec100; 

sbit K1 = P3^6;
sbit K2 = P3^7;

bit scan_key();
void proc_key();
void inc_sec();
void inc_min();
void inc_hour();
void display();
void delayms(unsigned char ms);

void main(void)
{
 P0 = 0xff;
 P2 = 0xff;
 TMOD = 0x11;  // 定时器0, 1工作模式1, 16位定时方式
 TH1 = 0xdc;
 TL1 = 0;

 TH0 = 0xFC;
 TL0 = 0x17;
 
 hour = 12;
 min = 00;
 sec = 00;

 sec100 = 0;
 
 dis_buf[0] = dis_code[hour / 10];  // 时十位
 dis_buf[1] = dis_code[hour % 10];  // 时个位
 dis_buf[3] = dis_code[min / 10];  // 分十位
 dis_buf[4] = dis_code[min % 10];  // 分个位
 dis_buf[6] = dis_code[sec / 10];  // 秒十位
 dis_buf[7] = dis_code[sec % 10];  // 秒个位
 dis_buf[2] = 0xf7;      // 显示"-"
 dis_buf[5] = 0xf7;      // 显示"-"
   
 dis_digit = 0xfe;
 dis_index = 0;
 
 TCON = 0x01;
 IE = 0x8a;    // 使能timer0,1 中断
 
 TR0 = 1;
 TR1 = 1;

 key_v = 0x03;

 while(1)
 {
  if(scan_key())
  {
   delayms(10);
   if(scan_key())
   {
    key_v = key_s;
    proc_key();
   }
  }
  
 }
}

bit scan_key()
{
 key_s = 0x00;
 key_s |= K2;
 key_s <<= 1;
 key_s |= K1;
 return(key_s ^ key_v); 
}

void proc_key()
{
 EA = 0;
 if((key_v & 0x01) == 0)  // K1
 {
  inc_hour();
 }
 else if((key_v & 0x02) == 0) // K2
 {
  min++;
  if(min > 59)
  {
   min = 0;
  }
  dis_buf[3] = dis_code[min / 10];  // 分十位
  dis_buf[4] = dis_code[min % 10];  // 分个位
 }

 EA = 1;
}

void timer0() interrupt 1
// 定时器0中断服务程序, 用于数码管的动态扫描
// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
//    选通P2.0口数码管
// dis_buf   --- 显于缓冲区基地址 
{
 TH0 = 0xFC;
 TL0 = 0x17;
 
 P2 = 0xff;       // 先关闭所有数码管
 P0 = dis_buf[dis_index];   // 显示代码传送到P0口
 P2 = dis_digit;      // 

 dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管
 dis_index++;      // 
     
 dis_index &= 0x07;   // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
} 

void timer1() interrupt 3
{
 TH1 = 0xdc;
 
 sec100++;
 
 if(sec100 >= 100)
 {
  sec100 = 0;
  inc_sec();
 }
}

void inc_sec()
{
 sec++;
 if(sec > 59)
 {
  sec = 0;
  inc_min();
 }
 dis_buf[6] = dis_code[sec / 10];  // 秒十位
 dis_buf[7] = dis_code[sec % 10];  // 秒个位 
}

void inc_min()
{
 min++;
 if(min > 59)
 {
  min = 0;
  inc_hour();
 }
 dis_buf[3] = dis_code[min / 10];  // 分十位
 dis_buf[4] = dis_code[min % 10];  // 分个位
}

void inc_hour()
{
 hour++;
 if(hour > 23)
 {
  hour = 0;
 }
 if(hour > 9)
  dis_buf[0] = dis_code[hour / 10];  // 时十位
 else
  dis_buf[0] = 0xff;     // 当小时的十位为0时不显示
 dis_buf[1] = dis_code[hour % 10];  // 时个位

}


void delayms(unsigned char ms) 
// 延时子程序
{      
 unsigned char i;
 while(ms--)
 {
  for(i = 0; i < 120; i++);
 }
}
====================================================
四位数码管时间显示(秒和分)#仿真通过了的##include<reg51.h>
#define uchar unsigned char
#define CYCLE 1000
uchar min=59;
uchar sec=0;
unsigned int counter;
bit flag=0;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
uchar DisplayArray[4];
void Modify(void);
void Scan();


void main()    //主程序
{
 TMOD=0x10;
 TH1=(65536-CYCLE)/256;
 TL1=(65536-CYCLE)%256;
 TR1=1;
 IE=0x88;

 counter=0;
 Modify();
  while(1)
  {
   Scan();
   if(flag==1)
   {
    sec++;
    Modify();
    
   }
  }
}


void delay(uchar n)      //延时子程序
{
 uchar i,j;
 for(i=0;i<n;i++)
 {
  j=0xff;
  while(j--);
 } 

}


void Modify(void)   //时间调整程序
{
 uchar Temp;
 Temp=sec;
 sec%=60;
 min+=Temp/60;
 Temp=min;
 min%=60;

 DisplayArray[0]=(min/10);
 DisplayArray[1]=(min%10);
 DisplayArray[2]=(sec/10);
 DisplayArray[3]=(sec%10);

 flag=0;
}


void Scan()     //显示扫描程序
{
  P0=0x0e;
  P2=table[DisplayArray[0]];
  delay(2);

  P0=0x0d;
  P2=table[DisplayArray[1]];
  delay(2);

  P0=0x0b;
  P2=table[DisplayArray[2]];
  delay(2);

  P0=0x07;
  P2=table[DisplayArray[3]];
  delay(2);
}



void time_1(void) interrupt 3 using 1  //定时器1中断程序
{
 if(++counter>=1000)
 {
  flag=1;
  counter=0;
 }

 TH1=(65536-CYCLE)/256;
 TL1=(65536-CYCLE)%256;
}
==============================================
4位LED时钟程序#include<reg51.h>
#define uchar unsigned char
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar j,k,cnt,second,minute,hour;
delay()
{
     for(j=5;j>0;j--)
      for(k=125;k>0;k--)
        ;
}

void timer0() interrupt 1 using 0
{
     TH0=0x3c;     
     TL0=0xb0;     
     cnt++;                               
     if(cnt==20)              
     {
        cnt=0;
        second++;         
         if(second==60)             
        {
            second=0;
            minute++;      
               if(minute==60)         
            {
                 minute=0;    
                hour++;     
                   if(hour==24)
                {
                    hour=0;
                }
            }
           }
      }
}
void main()
{
     second=0; minute=0; hour=0;  
     TH0=0x3c;     
     TL0=0xb0;
     EA=1;
    ET0=1;
    TMOD=0x01;
    TR0=1; 
    while(1)                   
    {
          P0=table[(minute%10)];
          P2=0xf7;
         delay();
          P0=table[(minute/10)];
         P2=0xfb;
          delay();
          P0=table[(hour%10)];
          P2=0xfd;
          delay();
        P0=table[(hour/10)];
          P2=0xfe;
          delay(); 
    }
}
=================================================
这是4个8的,时间还没校准。

#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
char DATA_7SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
uchar hour=0,min=0,sec=0;
uchar deda=0;
bit d_05s=0;
uchar set=0;
uchar m=0;
uchar flag=0;
void delay(uint k);
void conv();
void disp();

void init_timer()
              {
      TMOD=0x01;
      TH0=-(5248/256);
      TL0=-(5248%256);
      IE=0x82;
      TR0=1;
      }

void T0_srv(void) interrupt 1
            {
    TH0=-(5248/256);
    TL0=-(5248%256);
    deda++;
    }


void conv()
           {
      if(deda<=100)d_05s=0;
   else d_05s=1;
   if(deda>=200){sec++;deda=0;}
   if(sec==60){min++;sec=0;}
   if(min==60){hour++;min=0;}
   if(hour==24){hour=0;}
   }

void disp()
           {
      P0=DATA_7SEG[hour/10];P2=0xf7;delay(1);
   P0=DATA_7SEG[hour%10];P2=0xfb;delay(1);
   if(d_05s==1){if(P2_2==0)P0_7=0;else P0_7=1;}  
   delay(1);
   P0=DATA_7SEG[min/10];P2=0xfd;delay(1);
   P0=DATA_7SEG[min%10];P2=0xfe;delay(1);
   }


void set_time()                                    
               { uchar m;
        if(P2_5==0)delay(1);
     if(P2_5==0)hour++;
     if(hour==24)hour=0;
     for(m=0;m<30;m++)
      {
      disp();
      if(P2_2==0)P0_7=0;  

      else P0_7=1;
      delay(1);
          }

               if(P2_6==0)delay(1);
      if(P2_6==0)min++;
      if(min==60)min=0;
      for(m=0;m<30;m++)
         {
      disp();
      if(P2_2==0)P0_7=0;
      else P0_7=1;
      delay(1);
      }
     }

 
void time()
          {
    conv();
    disp();
    }

 void scan_key()
             {
    delay(1);
    if(P2_4==0)set++;
    if(set>=2)set=0;
    if(set==1)flag=0x55;
    F0:if(P2_4==0)goto F0;
    }

 void delay(uint k)
            {
    uint i,j;
    for(i=0;i<k;i++){
    for(j=0;j<121;j++);
     }
    }

 
void main()
          {
     init_timer();
     while(1)
            {
      if(P2_4==0)scan_key();
      switch(set)
      {
      case 0:time(); break;
      case 1:set_time();break;
      default:break;
      }
      if(flag!=0x55)
      {
      P0=0xc0;P2=0xc0;delay(100);
      P2=0xff;delay(400);
      }
     }
    }
==================================
//#define num1 num/100000
//#define num2 num%100000/10000
//#define num3 num%100000%10000/1000
//#define num4 num%100000%10000%1000/100
//#define num5 num%100000%10000%1000%100/10
//#define num6 num%100000%10000%1000%100%10

不妨写成这样试试

/#define num1 num/100000
//#define num2 (num/10000)%10
//#define num3 (num/1000)%10
//#define num4 (num/100)%10
//#define num5 (num/10)%10
//#define num6 num%10

==========================================

// Header: 数字示波器
// File Name:lcdII.c 
// Author: H.C.H
// Date:2007/8/15
//说明:基本成功


#include <SST89x5x4.H>
#include <math.h>
#include<ziku.h>
#define uint  unsigned int
#define uchar unsigned char
#define Disp_On    0x3f
#define Disp_Off   0x3e
#define Col_Add        0x40    //列地址
#define Page_Add 0xb8          //行地址
#define Start_Line 0xc0

//********************LCD128*64口定义**********************
#define pi 3.14159
#define Lcd_Bus     P1 
#define LCD_CON     P0 
sbit s0=P2^0;
sbit s1=P2^1;
sbit s2=P2^2;
sbit s3=P2^3;


sbit adclk=P2^5;
sbit adcs=P2^7;
sbit addata=P2^6;

unsigned char bdata adc;
sbit  adclow=adc^0;
sbit CS2=LCD_CON^3;             //  CS2
sbit CS1=LCD_CON^4;             //  CS1

sbit DI=LCD_CON^0;              //液晶数据指
sbit RW=LCD_CON^1;              //液晶读写
sbit E =LCD_CON^2;              //液晶使能
uchar state=0;
sbit beep=P2^4;
 
uchar max,min;
uchar d[3];
uchar dd[4];

struct complex 
{
    float real;
 float image;
};
struct complex xdata s[64];

uint data T2NOW=0,time2_count=65535;
unsigned long data fi_int=0,fs=0,fs_const=0; 
uchar data ii=0,T0_counter=0,Time_NO=2,T1_counter=0;
bit over=0;
struct complex mul(struct complex,struct complex);    /*定义复数乘*/
void FFT(struct complex *s);
//******************************子函数*********************
void delay1(uint);                 //延时程序
void write_cmd1(uchar);            //写命令操作字
void write_data1(uchar);           //写数据
void cls();                        //清屏程序
void init();                       //初始化程序
uchar read_data();                 //读数据
void line_h(uchar x,uchar y,uchar l);
void line_v(uchar x,uchar y,uchar l);
void screen1(void);
unsigned char key();
//************************延时子程序***********************


struct complex mul(struct complex x,struct complex y)
{
    struct complex z;
    z.real=x.real*y.real-x.image*y.image;
    z.image=x.real*y.image+x.image*y.real;
    return (z);
}

void FFT(struct complex *s)
{
    unsigned char idata nv2,nm1,k,level,i,j=0;
 unsigned char  idata ip,le,lei;
    struct complex idata v,w,t;
 float max;  
    nv2=64>>1;
    nm1=64-1;
    for(i=0;i<nm1;i++) 
 {
        if(i<j)
  {
      t=s[j];
      s[j]=s[i];
      s[i]=t;
  }
        k=nv2;
        while(k<=j)
  {
      j-=k;
      k=k>>1;
  }
        j+=k;
    }

    le=1;   
    for(level=1;level<=6;level++)
    {   
     lei=le;
        le<<=1;
        v.real=1.0;
  v.image=0.0;       
        w.real=cos(pi/lei);
  w.image=-sin(pi/lei);
        for(j=0;j<lei;j++)
        {
         for(i=j;i<64;i+=le)
            {
          ip=i+lei;
                   t=mul(s[ip],v);
                   s[ip].real=s[i].real-t.real;
                   s[ip].image=s[i].image-t.image;
                   s[i].real+=t.real;
                   s[i].image+=t.image;
           }
           v=mul(v,w);
       }
    }

 for(i=0;i<32;i++)
 s[i].real=sqrt(s[i].real*s[i].real+s[i].image*s[i].image); //幅值
 max=s[0].real;
 for(i=1;i<32;i++)if(max<s[i].real)max=s[i].real;
 for(i=0;i<32;i++)s[i].real=s[i].real*50/max;

}

unsigned char adconvert()
{   unsigned char i;
    adcs=1;
    adcs=0;
    adclk=0;
    for(i=0;i<8;i++)
    {   adclk=1; 
        adclow=addata;
        adclk=0;
        if(i<7) adc=adc<<1;
    }
    adclk=0;
    adcs=1;
    return(adc);
}

void delay1(uint t)             
{
        uint i,j;
        for(i=0;i<t;i++)
                for(j=0;j<10;j++);
}

//********************写命令到LCD**************************


void write_cmd1(uchar cmd)  
{

        DI=0; RW=0;
        Lcd_Bus=cmd;
        E=1;
        E=0;
  delay1(1);

}

void display_h(uchar page,uchar col,uchar code *english,uchar n)
{
  uchar j,i;
  if(col<64)
  {
          CS2=1;CS1=0;
   }
  else
  {
          CS2=0;CS1=1;

⌨️ 快捷键说明

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