用AT89C51单片机控制LED数码管能够显示时间和日期,求电路图和程序代码

作者&投稿:柳询 (若有异议请与网页底部的电邮联系)
用AT89C51单片机控制两位8段LED数码管采用动态显示的方式显示出201211458~


#include "reg51.h"
#define uchar unsigned char
uchar display_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar time[8]={2,0,1,2,1,1,4,5};
//uchar time[3]={0,0,0};

void delay(void)
{
uchar i;
for(i=250;i>0;i--);
}

void display()
{
P2=0x80;
P0=display_code[time[0]];
delay();
P2=0x00;

P2=0x40;
P0=display_code[time[1]];
delay();
P2=0x00;

P2=0x20;
P0=display_code[time[2]];
delay();
P2=0x00;

P2=0x10;
P0=display_code[time[3]];
delay();
P2=0x00;

P2=0x08;
P0=display_code[time[4]];
delay();
P2=0x00;

P2=0x04;
P0=display_code[time[5]];
delay();
P2=0x00;

P2=0x02;
P0=display_code[time[6]];
delay();
P2=0x00;

P2=0x01;
P0=display_code[time[7]];
delay();
P2=0x00;
}

void main(void)
{
uchar i;
while(1)
{
for(i=0;i<100;i++)
{
display();
}
}
}

这种仿真图和程序,在百度知道里到处都是,随便就可搜索到一大堆的。

这是一个朋友做的,你可以参考一下:

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit db=P2^7;
char i,sec,min,h,date,month,year,flag;
uchar j,k,m,n,o,p;
sbit dula=P2^0;
sbit wela1=P2^1;
sbit wela2=P2^2;
sbit key_ch=P3^5;
sbit key_add=P3^6;
sbit key_minus=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();
void delay(uint);
void second_display();
void minute_display();
void hour_display();
void date_display();
void month_display();
void year_display();
void control();
void time();
void main()
{
 init();
 while(1)
 {
  second_display();
  minute_display();
  hour_display();
  date_display();
  month_display();
  year_display();
  control();
 }
}
void init()
{
 db=0;
 i=0;
 sec=0;
 min=0;
 h=0;
 date=1;
 month=1;
 year=1;
 flag=0;
 wela1=0;
 wela2=0;
 EA=1;
 ET0=1;
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TR0=1;
}
void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void second_display()
{
 int sec_shi,sec_ge;
 sec_shi=sec/10;
 sec_ge=sec%10;

 if(flag==1&&j!=1)
  j++; 
 else
 {
  j=0;
  dula=1;
  P0=~table[sec_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x20;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[sec_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0; 
  wela2=1;
  P1=0x10;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void minute_display()
{
 int min_shi,min_ge;
 min_shi=min/10;
 min_ge=min%10;
 
 if(flag==2&&k!=1)
  k++; 
 else
 {
  k=0;
  dula=1;
  P0=~table[min_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x08;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[min_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x04;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void hour_display()
{
 int h_shi,h_ge;
 h_shi=h/10;
 h_ge=h%10;
 
 if(flag==3&&m!=1)
  m++; 
 else
 {
  m=0;
  dula=1;
  P0=~table[h_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x02;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  delay(1);
  
  dula=1;
  P0=~table[h_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x01;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  wela2=0;
  delay(1);
 }
  
}
void date_display()
{
 int date_shi,date_ge;
 date_shi=date/10;
 date_ge=date%10;

 if(flag==4&&n!=1)
  n++; 
 else
 {
  n=0;
  dula=1;
  P0=~table[date_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x80;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[date_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x40;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void month_display()
{
 int month_shi,month_ge;
 month_shi=month/10;
 month_ge=month%10;

 if(flag==5&&o!=1)
  o++; 
 else
 {
  o=0;
  dula=1;
  P0=~table[month_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x20;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[month_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x10;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void year_display()
{
 int year_qian,year_bai,year_shi,year_ge;
 year_qian=year/1000;
 year_bai=year%1000/100;
 year_shi=year%1000%100/10;
 year_ge=year%10;

 if(flag==6&&p!=1)
  p++; 
 else
 {
  p=0;
  dula=1;
  P0=~table[year_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x08;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[year_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x04;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 
  dula=1;
  P0=~table[year_bai];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x02;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
 
  dula=1;
  P0=~table[2];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x01;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  wela1=0;
 }
}
void control()
{
 if(!key_ch)
 {
  delay(5);
  if(!key_ch)
  {
   flag++;
   if(flag==7)
    flag=0;
  }
 }
 while(!key_ch);
 if(flag==1&&key_add==0)
 {
  while(!key_add);
  sec++;
  if(sec==60)
   sec=0;
 }
 if(flag==1&&key_minus==0)
 {
  while(!key_minus);
  sec--;
  if(sec==-1)
   sec=59;
 }

 if(flag==2&&key_add==0)
 {
  while(!key_add);
  min++;
  if(min==60)
   min=0;
 }
 if(flag==2&&key_minus==0)
 {
  while(!key_minus);
   min--;
  if(min==-1)
   min=59;
 }

 if(flag==3&&key_add==0)
 {
  while(!key_add);
  h++;
  if(h==24)
   h=0;
 }
 if(flag==3&&key_minus==0)
 {
  while(!key_minus);
  h--;
  if(h==-1)
   h=23;
 }

 if(flag==4&&key_add==0)
 {
  while(!key_add);
  date++;
  if(date==29)
   if((year%4!=0)&&(month==2))
    date=1;
  if(date==30)
   if((year%4==0)&&(month==2))
    date=1;
  if(date==31)
   if((month==4)||(month==6)||(month==9)||(month==11))
    date=1;
  if(date==32)
   if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
    date=1;  
 }

 if(flag==5&&key_add==0)
 {
  while(!key_add);
  month++;
  if(month==13)
   month=1;
 }
 if(flag==5&&key_minus==0)
 {
  while(!key_minus);
  month--;
  if(month==0)
   month=12;
 }

 if(flag==6&&key_add==0)
 {
  while(!key_add);
  year++;
  if(year==99)
   year=1;
 }
 if(flag==6&&key_minus==0)
 {
  while(!key_minus);
  year--;
  if(year==0)
   year=99;
 } 
}

void T0_rpt() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 i++;
 time();
}

void time()
{
 if(i==20)
 {
  i=0;
  sec++;
  if(sec==60)
  {
   sec=0;
   min++;
   if(min==60)
   {
    min=0;
    h++;
    if(h==24)
    {
     h=0;
     min=0;
     sec=0;
     date++;
     if(date==29)
      if((year%4!=0)&&(month==2))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==30)
      if((year%4==0)&&(month==2))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==31)
      if((month==4)||(month==6)||(month==9)||(month==11))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==32)
      if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
    }
   }
  }
 } 
}




at89c51是什么单片机?
AT89C51是老式的255位单片机,STC89C51在AT89C51上加入了AD数模转换,集成程度更高。MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)8751等通用产品。

简述at89c51的基本结构
AT89C51单片机的基本结构主要由几个核心部分组成,以下是对其结构的简要概述:中央处理器(CPU):作为单片机的核心,CPU负责完成运算和控制功能。它主要包括运算器和控制器两部分,其中运算器用于实现算术和逻辑运算,控制器则负责识别指令并协调计算机内各组成单元进行工作。存储器:程序存储器:采用4KB的Flas...

AT89C51单片机主要功能有哪些啊?
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

stc89c51和51的区别是什么?
区别:1、AT89C51是老式的255位单片机。STC89C51在AT89C51的基础之上上加入了AD数模转换,集成程度更高。2、STC89C51是宏晶公司生产,AT89C51.是Atmel公司生产。3、STC89C51可以在线编程也就是有ISP功能,AT89C51必须通过编程器烧录。4、STC89C51具有6T模式,速度要快些,AT89C51是12T模式。5、STC89C51集成了512...

如何显示proteus中at89c51的接地和电源引脚?
1、点击下图中箭头所指的图标。2、在跳开的界面中需要点击“P”字按钮。3、可以看到界面中的数字,输入“AT89C51”就会出现各种51单片专机。4、接下来是一系列的数子,用鼠标双击。5、然后快捷小窗就会出现选好的单片机,选中放置到编辑区即可。单片机就显示接地和电源管脚。

at89c51什么意思
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术...

AT89C51和一般单片机的不同之处
AT89C51是个老古董,厂商早就停产了 由于引进的比较早,很多单片机资料上都使用这个芯片来做例程,所以在中国很有名,

单片机的AT89C51和STC89C52的区别是什么?
1、生产的公司不同 AT89C51是Atmel公司生产;STC89C52是宏晶公司生产。2、RAM和ROM不同 AT89C51是128byte RAM,4K ROM;STC89C52是256Byte,8K ROM。3、定时器数量不同 AT89C51有T0、T1两个16位定时器;STC89C52有T0、T1、T2三个16位定时器。

单片机的种类是AT89C51单片机?
AT89C51具有片内E2PROM,是真正的单片机,由于不需要外接EPROM,所以应用非常普遍。8031、8051片内没有EPROM,但它价格很低,软硬件系统开发成熟,所以应用也非常广泛。目前51系列的产品大多是8031、8051和AT89C51等。除了Intel公司,还有Atmel、Winbond、Philips、TEMIC、ISSI和LG等公司都生产兼容80C51的产品。...

单片机at89c51和AT89S51的区别有哪些
它们之间主要区别在于以下几点:1.引脚功能 引脚几乎相同,改变是,在AT89S51 P1.5中,P1.6,P1.7具有第二功能,即这三个引脚的第二功能构成一个串行ISP编程接口。2.编程功能 AT89C51仅支持并行编程,而AT89S51不仅支持并行编程,还支持ISP在线编程。在编程电压方面,AT89C51除5V外还需要12V Vpp才能...

辉县市17662008164: 怎样利用AT89C51控制led灯 -
浦苑治糜: 1.AT89C51有十几个I/O口,输出电压和电流比较低,但是可以带1-2颗LED灯 2.通过其他驱动IC,如595,DM134等等,这些IC在电路板上控制LED灯, 自己编制程序,通过通讯给信号驱动这些IC,控制LED灯

辉县市17662008164: 用AT89C51单片机控制8个Led的流水灯的C程序看不懂 -
浦苑治糜: #include<reg51.h> 包含单片机专用头文件 #include<intrins.h> 这个是什么俺也不知道,但这个程序不需要这个头文件 void Delay10ms(unsigned int c); 自定义的延时函数声明 main() 主函数 {unsigned int LED; 建立一个数值型变量,变量名...

辉县市17662008164: 求单片机大神!!! 用AT89c51单片机控制LED灯闪烁设计电路和编程! -
浦苑治糜: #include<reg51.h> sbit a=P1^0; void delay(unit time) void main() { while(1) { a=0; delay(500); a=1; delay(500); } } void delay(unsigned int time) { int i; for(;time>0;time--) for(i=100;i>0;i--); }

辉县市17662008164: 一个LED灯如何与AT89C51单片机相接 -
浦苑治糜: 1到3K电阻一端接VCC,另一端接EDL,LED另一端接IO端口的任意一个管脚,IO管脚低电平LED亮,高电平LED灭.

辉县市17662008164: 如何用51单片机 控制12个led 上一个led闪烁五下 熄灭 ,下一个接着亮并.闪烁五下 -
浦苑治糜: 你可以拿单片机的12引脚分别控制12个灯先将1个灯点亮,然后延时一段时间(自己定,只要能看到闪烁),再对这个端口状态取反,循环5次即可.然后再对2灯操作~~~

辉县市17662008164: at89c51单片机实现LED数码管显示四位数,两个开关进行加和减.求硬件搭建图和C语言程序. -
浦苑治糜: 这个设计其实是很基础的一个小系统:最小系统、按键电路、LED驱动电路基本就可以满足你的要求了;如果打算每个数码管可调节,那么再加一个按键切换或者说移位;如果不想加按键数目,那么可以采用按键复用:长按,短按完成.

辉县市17662008164: 如何用AT89C51单片机点亮32个LED灯?求详细原理图.各位帮帮忙了!!!谢谢啦! -
浦苑治糜: 呵呵,最简单的,就是把四个端口的32条IO各连到一个LED的负极,然后每个LED各串一个电阻到电源. 不过这样的话,你的单片机就不能干别的事了. 当然也可以通过扩展,或者用矩阵,方法就很多了.

辉县市17662008164: 用AT89C51单片机端口P1控制8个LED灯的变化(左移2次右移2次闪烁2次延时一秒)的工作原理 -
浦苑治糜: 基本方式就是: P1=0X01;//或者别的数,看你想亮几个 DELAY_MS(500);//适当延时 P1=P1>>1;//左移或者右移 DELAY_MS(500); P1=P1>>1; DELAY_MS(500); ..... 代码按顺序执行就是了.P1口不同的输出对应不同的亮灯状态,不同的输出中间加上延时即可实现不同的效果.

辉县市17662008164: 用AT89C51单片机端口P1控制8个LED灯的变化(左移2次,右移2次,闪烁2次,延时的时间1秒 -
浦苑治糜: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38#include<reg51.h> #include<intrins.h> #define uchar unsigned char voiddelay(inta) { uchar i; while(a--)for(i=0;i<120;i++); } main() { uchar i,j,...

辉县市17662008164: 用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂? -
浦苑治糜: #include void Delay1ms(unsigned int count) /*延时函数,延迟时间为count*1ms)*/{ unsigned int i,j; for(i=0;i<count;i++...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网