【急】利用51单片机的定时器和实验仪的数码管电路设计一个电子时钟,显示格式XX XX XX,依次为 时、分、秒

今晚18:00点之前发到[email protected] 要用汇编语言编写的 最好还有流程图 悬赏10个金币

给你个电路和程序,//前几天帮一个网友写,单片机定时时钟在调节功能,可以参考一下我程序

/**************************************************

*

*    6位数码管显示电子钟

*

* 功能:  按键加,按键减, 按键,启动和停止。

*

*

***************************************************/

#include "REG52.H"

           

sbit SHUG_01 = P2^0;    //数码管1

sbit SHUG_02 = P2^1;    //数码管2

sbit SHUG_03 = P2^2;    //数码管3

sbit SHUG_04 = P2^3;    //数码管4

sbit SHUG_05 = P2^4;    //数码管5

sbit SHUG_06 = P2^5;    //数码管6

 

sbit    KEY0_01 = P0^0;    //按键  启动或停止

sbit    KEY0_02 = P0^1;    //按键  加

sbit    KEY0_03 = P0^2;    //按键减

sbit    KEY0_04 = P0^3;    //按键菜单

 

#define     LED_DATA        P1      //P1数据端口

unsigned char value_temp = 0;

unsigned char value_Outk = 0;

unsigned char value_shio = 8;

unsigned char value_feno = 40;

unsigned char value_miao = 0;

 

unsigned char code   value_tab0[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共阳极

unsigned char code   value_tab1[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //共阳极带点 

 

/*

 * 延时1ms延时子函数

**/

void Delay_1ms(unsigned int Time)

{

 unsigned int x, y;

 for(x = Time; x > 0; x--)

  for(y = 120; y > 0; y--);

}

 

/*

 * 程序运行【启动和停止】子函数

**/

void Disp_layledketCmd(void)

{

 /***小时***/

 SHUG_01 = 1;   

 LED_DATA = value_tab0[value_shio / 10];   /*******小时的十位数显示***************/

 Delay_1ms(5);

 SHUG_01 = 0;

 SHUG_02 = 1;

 LED_DATA = value_tab1[value_shio % 10];   /*******小时的个位数显示***************/

 Delay_1ms(5);

 SHUG_02 = 0;

 

 /***分钟***/

    SHUG_03 = 1;   

 LED_DATA = value_tab0[value_feno / 10];   /*******分钟的十位数显示***************/

 Delay_1ms(5);

 SHUG_03 = 0;

 SHUG_04 = 1;

 LED_DATA = value_tab1[value_feno % 10];   /*******分钟的个位数显示***************/

 Delay_1ms(5);

 SHUG_04 = 0;

 

 /***秒钟***/

    SHUG_05 = 1;   

 LED_DATA = value_tab0[value_miao / 10];   /*******秒钟的十位数显示***************/

 Delay_1ms(5);

 SHUG_05 = 0;

 SHUG_06 = 1;

 LED_DATA = value_tab0[value_miao % 10];   /*******秒钟的个位数显示***************/

 Delay_1ms(5);

 SHUG_06 = 0;

}

 

/*

 * 定时器初始化定时50ms

**/

void Tero_Init(void)

{

 TMOD = 0x01;

 TH0 = 0x4C;

 TL0 = 0x00;

 ET0 = 1;

 TR0 = 1;

 EA = 1;

}

 

/*

 * 按键开关【启动和停止】子函数

**/

void Scan_keyoutCmd(void)

{

 if(KEY0_01 == 0)           

 {

  Delay_1ms(10);         

  if(KEY0_01 == 0)           

  {

   TR0 = ~ TR0;   

  }

  while(KEY0_01 == 0);         

 } 

 

 if(KEY0_02 == 0)           

 {

  Delay_1ms(10);           

  if(KEY0_02 == 0)           

  {

   value_miao--;   

   if(value_miao == -1)

   {

    value_feno--;

    value_miao = 59;

    if(value_feno == -1)

    {

     value_shio--;

     value_feno = 59;

     if(value_shio == -1)

     {

      value_shio = 23;

     }

    } 

   }

   while(KEY0_02 == 0);       

  }

 } 

 

 if(KEY0_03 == 0)           

 {

  Delay_1ms(10);         

  if(KEY0_03 == 0)         

  {

   value_miao++;   

   if(value_miao == 60)

   {

    value_miao = 0;

    value_feno++;

    if(value_feno == 60)

    {

     value_feno = 0;

     value_shio++; 

     if(value_shio == 24)

     {

      value_shio = 0;

     }

    } 

   }

    while(KEY0_03 == 0);          //检测松手

  }

 } 

}

 

/*

 * 函数主体

**/

int main(void)

{

 P1 = P2 = P3 = 0x00;

 Tero_Init();

 

 while(1)

 {

  Scan_keyoutCmd();

  Disp_layledketCmd();  //执行应运程序 

 } 

}

 

/*

 * 定时器中断服务程序

**/

void Tmero()interrupt 1

{

 TH0 = 0x4C;

 TL0 = 0x00;

 value_temp++;

 if(value_temp == 20)

 {

  value_temp = 0;

  value_miao++;

  if(value_miao == 60)

  {

   value_feno++;

   value_miao = 0;

   if(value_feno == 60)

   {

    value_shio++;

    value_feno = 0;

    if(value_shio == 24)

    {

     value_shio = 0;

    }

   }

 

  }

 } 

}

 

 

 

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-24
硬件是很简单的,我不画,和它的简要说明。最小的单芯片系统基础上的P0端口访问的数据的数字控制端,P2.6,P2.7连接数码管的控制端。
程序如下:
#包括的的
定义uint无符号整数
定义UCHAR无符号的字符
SBIT S1 = P2 ^ 6 ;/ / 10位
SBIT S2 = P2 ^ 7 ;/ /位
UCHAR NUM0,数量;
的UCHAR代码表[] =
{的0x3F,0X06,0x5b, 0x4f,0x66,
0x6d,0x7d,为0x07到0x7f,0x6f,
0x77,0x39,0x7c,0x5e者,值为0x79,0x71};
无效延迟(UCHAR X)

UCHAR I,J;
(I = X> 0,我 - )
为(J = 110; J> 0,J - );
} BR />无效的init()
{
TMOD = 0X01; / /的
TH0 =(65536-45872)/ 256的设置定时器0的作品01; ??/ /加载的初始值11.0592水晶定时50ms的
TL0 =(65536-45872)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
的无效TO_time()中断
{
TH0 =(65536-45872)/ 256 / /加载初始值的11.0592晶体定时50ms的
TL0 =(65536-45872)%256;
NUM0 + +;
(40 ==的NUM0)/ /到40,2秒
{
NUM0 = 0;
数+ +; />}
}
显示()
{
S1 = 1;
P0 =表[num/10];
S1 = 0;
P0 = 0XFF;
延迟(5);
S2 = 1;
P0 =表[NUM%10];
S2 = 0;

}
无效的主要()
{
的init();
(1)
{
显示()
}
}
第2个回答  2012-12-24
已经晚了吧