倾家荡产求单片机C语言程序:0~99秒计数器;三个独立按键控制,P1.1开始 P1.2暂停P1.3清零 2个数码管显示

要c语言的 重赏

以前回答过这样的问题。

和本次稍有区别是:以前是用“两个独立按键控制”,启动和暂停,用一个按键控制。

现在,按照楼主的要求,进行了改动,程序如下。

//下面是00-99秒计数的语言C程序。

#include<reg52.h>

#include<intrins.h>

unsigned char i, j;

unsigned char code table[] = {

    0xc0, 0xf9, 0xa4, 0xb0, 0x99,

    0x92, 0x82, 0xf8, 0x80, 0x90

};

sbit  QI_DONG = P1^1;

sbit  TING_ZH = P1^2;

sbit  QING_LY = P1^3;

bit k;

//---------------------------------------------

void Delay_1ms(unsigned int x) 

  unsigned int  i, j; 

  for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); 

//---------------------------------------------

void main( )

{

  TMOD = 0x01;                       //;T0定时方式1

  TH0 = (65536-50000) / 256;         //;50ms@12MHz

  TL0 = (65536-50000) % 256;

  TR0 = 1;                           //;定时器初始化结束.

  ET0 = 1;                           //;开启定时中断.

  EX0 = 1;

  EX1 = 1;

  EA = 1; 

  i = 0; 

  j = 0;

  P0 = 0xC0;

  P2 = 0xC0;

  while(1) {

    if (QI_DONG == 0) {

      Delay_1ms(10);    while(QI_DONG == 0);   k = 1;

 }

    if (TING_ZH == 0) {

      Delay_1ms(10);    while(TING_ZH == 0);   k = 0;

 }

    if (QING_LY == 0) {

      Delay_1ms(10);    while(QING_LY == 0);

      i = 0;   j = 0;  P0 = 0xC0;  P2 = 0xC0;

 }

  }

}

//---------------------------------------------

void timer0(void) interrupt 1

{

  TL0 = (65536-50000) % 256;

  TH0 = (65536-50000) / 256;         //;50ms@12MHz

  if (k) {

    j++;

    if (j == 20) {

      j = 0;

      i++;

      if (i == 100) i = 0;

      P0 = table[i / 10];

      P2 = table[i % 10];

    }

  }

}

//---------------------------------------------

本程序,经过了PROTEUS检验,截屏如下图。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-23
include"at89x52.h"
unsigned char code a[]={0x3f,0x06,0x5b,0x4f,0x66 ,0x6d ,0x7d ,
0x07 ,0x7f ,0x6f ,0x77 ,0x7c};
unsigned char code tv[]={0xfe,0xfd,0xfb,0xf7};

unsigned char data led[4];
sbit key1=P3^1;
sbit key2=P3^5;//p3_1

unsigned int data tvdata=2000;

void delay(void)
{
unsigned int i;
for(i=0;i<500;i++);

}

ledxianshi()
{
unsigned char k,i;

led[0]=tvdata/1000;
led[1]=(tvdata%1000)/100;
led[2]=tvdata%100/10;
led[3]=tvdata%10;

for(k=0;k<4;k++)
{
i=led[k];
P0=a[i];
P2=tv[k];
delay();
}

}

main()
{

while(1)
{
if(key1==0)
{ while(key1==0){};
if(tvdata<2000)
{tvdata=tvdata+1;}
}

if(key2==0)
{ while(key2==0);
if(tvdata>0)
tvdata=tvdata-1;

}

ledxianshi();
}
}
第2个回答  2010-06-23
我应该有源代码,应该和你要求的一样。我回家看看,在我电脑上呢。
第3个回答  2010-06-23
这个可以找我啊,也不要你倾家荡产的啦呵呵
相似回答