倾家荡产求单片机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
这个可以找我啊,也不要你倾家荡产的啦呵呵

求解单片机完成用三个按键控制三个发光二极管的控制系统,汇编语言
KEY0 BIT P1.0KEY1 BIT P1.1KEY2 BIT P1.2LED0 BIT P1.4LED1 BIT P1.5LED2 BIT P1.6ORG 0000HLJMP MAINORG 0030HMAIN: JB KEY0,MAIN1 CLR LED0 SJMP MAINMAIN1: SETB LED0 JB KEY1,MAIN2 CLR LED1 SJMP MAINMAIN2: SETB LED1 JB KEY2,MAIN...

修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现...
if(flag == 2) { P0 = table[0];P2 = table[0];flag = 0;aa = 0;num = 0;TR0 = 1;} } } } } void timer0() interrupt 1 { TH0 = (65536 - 50000) \/ 256;TL0 = (65536 - 50000) % 256;aa++;if(aa == 20) { aa = 0;num++;if(num == 60) num = 0...

求高手修改单片机C语言程序:0~59秒计数器;1个独立按键控制,2个数码...
\/\/注意;P0口要加上拉电阻 。include<reg52.h> include<intrins.h> define uint unsigned int define uchar unsigned char sbit KEY=P1^0;uchar aa,num,num1,flag;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voi...

单片机 我有一篇从99到0倒计时的汇编语言的程序, 求大家帮我加入3个开...
程序写的可以,但是在硬软件资源使用上不科学。1.位寻址寄存器20H~2FH应专做为寻址用,平时的字节寄存器应从30H开始不较好。2.P3口各个引脚都有第二功能,能不用尽量不用。比如这次的电路:数码管a~g用P2口,位选用P1.0~P1.1,按键用P1.2~P1.4,完全够用。3.汇编编程要适当添加注释,提高...

单片机C语言,一个按键控制三个流水灯
void main(){ int i=0; \/\/设置参考变量 \/\/初始化 p1.0=1;p1.1=0;p1.2=0;\/\/进入按键操作 while(1){ if(p2.2==0){ i++;if(i==1){ p1.0=0;p1.1=1;p1.2=0;delay();\/\/延时,由于不知道你用的单片机型号,这个需要你自己设定了。} if(i==2){ p1.2=1;p1.0...

怎样用51单片机设计三个按键控制一个灯的程序,C程序
程序如下 include<reg51.h> sbit led1=P1.0;sbit key=P1.1;sbit key1=P1.2;sbit key2=P1.3;void main(){ while(1){ if((key|key1|key2)==0){led1=~led1;while((key|key1|key2)==0);} } 没试过 可能有些地方不对 你自己改改 反正思路就这样了 ...

用单片机c51,c语言编0-9计数器程序!谢谢!!!
你的硬件电路有问题啊,单片机31号脚要接高电平 还有,你的数码管接法也不对啊 看你的排阻接法,你的数码管要用共阴极的 当加到9之后,再按一下,是不是又恢复到0啦???下面是更改的回答 include<reg51.h>unsigned char a;unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,...

用c语言编写一个计数器(单片机为51型,数码管为共阴)要求有三个按键分别...
如果这样的话挺简单的,51单片机的计数器io口记得好像是P3^0和P3^1,但不管怎么,首先设置TMOD,将C\/T位置1,这就改为计数器了,然后可以编写函数来对一个变量进行加减;同样利用51单片机的外部中断也可以实现计数功能,打开外部中断开关,在外部中断服务函数对计数变量进行加减;最简单的,直接利用io口...

单片机程序求修改,实现按键控制数码管0-9,急!!!
num=0;while(key2==0);} } \/*实现定时器1方式1定时1S使得数码管加1显示功能*\/ if(key3==0) { delay(7);if(key3==0) { flag = ~flag;while(key3==0);} } } void T1_ini(){ TMOD=0X10;TH1=(65536-50000)\/256;TL1=(65536-50000)%256;EA=1;ET1=1;TR1=1;} void ...

请高手帮忙,51单片机C语言编程,按p2.1点亮P1.1后5分钟灭,按P2.2点亮...
if(key1==0){ TR0=1; \/\/启动定时同时点亮LED1 led1=0;} } while(!key1);\/\/等待按键释放 if(num1==300) \/\/5分钟 { num1=0;TR0=0;led1=1;} if(key2==0){ delay1ms(10);if(key2==0){ TR1=1;led2=0;} } while(!key2);if(num3==300){ num3=0;TR1=0;le...

相似回答