修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现暂停,第二次按按键,实现复位

求单片机C语言程序:0~59秒计数器;1个独立按键控制,,2个数码管显示,第一次按按键,实现暂停,第二次按按键,实现复位,复位后自动继续走动。仿真图已上,任务完成另加200分
以下是1个数码管实现的类似程序,可用可不用,仅供参考:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit KEY=P3^0;

uchar aa,num,flag;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delay(uint ms)
{
uchar t;
while(ms--)
for(t=0;t<123;t++);
}
void main()
{
num=0;
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P2=table[0];
while(1)
{
while(!KEY)
{
delay(10);
if(KEY)
{
flag++;
if(flag==1)
TR0=0;
if(flag==2)
{
P2=0x3f;
flag=0;
}
}
}
if(aa==20)
{
aa=0;
num++;
if(num==10)
num=0;
P2=table[num];
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}

#include<reg52.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit KEY = P3^0;

uchar aa,num,flag;

uchar code table[]={

    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint ms)

{

    uchar t;

    while(ms--)  for(t = 0; t < 123; t++);

}

void main()

{

    num = 0;

    aa = 0;

    TMOD = 0x01;

    TH0 = (65536 - 50000) / 256;

    TL0 = (65536 - 50000) % 256;

    TR0 = 1;

    ET0 = 1;

    EA = 1;

    P0 = table[0];

    P2 = table[0];

    while(1)  {

      if(!KEY) {

        delay(10);

        if(!KEY) {

          while (!KEY);

          flag++;

          if(flag == 1)  TR0 = 0;

          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;

      P0 = table[num / 10];

      P2 = table[num % 10];  

    } 

仿真实验截图如下:

追问

高手,不给力啊,我们老师居然该题了http://zhidao.baidu.com/question/284286148.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-21
#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];
}
}
}

修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现...
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint ms){ uchar t;while(ms--) for(t = 0; t < 123; t++);} void main(){ num = 0;aa = 0;TMOD = 0x01;TH0 = (65536 - 50000) \/ 256;TL0 = (65536 - 50000) % 256;TR0 = 1;ET0 = 1;EA = 1;P...

...单片机C语言程序:0~59秒计数器;1个独立按键控制,2个数码管显示_百度...
void timer0() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;aa++;}

51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一...
\\x0d\\x0a当按一下键,再启动,TR0=1,就开始计时了。\\x0d\\x0a再 按一下键,就停止,TR0=0,就不计时了。\\x0d\\x0a程序好写,先 定义一个按键\\x0d\\x0asbit key=P1^1; \/\/具体是哪个 键,你自己改\\x0d\\x0a主程序中,判断按键和启动\/停止\\x0d\\x0aif(key==0)\\x0d\\...

请问单片机怎么用独立按键按一下实现一个功能,按另一个按键实现另一个...
} 如果这两个功能不是死循环,就 简单了 while(1){ if(key1==0) {延时消抖 功能1} if(key2==0) {延时消抖 功能2} }

怎么用C语言实现51单片机独立按键跳出while(1)死循环 执行其他循环_百度...
while(1)语句只能用在主程序,而且只要用一次。如果子程序也用,必须有条件判断语句,跟一个return语句返回。再说你的三个子程序,既然用for控制了循环次数了,为什么要用while(1)呢?而且明明知道是死循环还用?三个子程序都把那个while(1)删掉就行了!

单片机中独立键盘和矩阵键盘如何一起使用 请用C语言写个程序说明,谢谢...
break;} \/\/以下处理独立按键 if(skey==0){ if(keyval!=0xff)keyval+=16; \/\/如果独立键按下,键值加16 while(skey==0); \/\/等待独立键释放 } } void t0isr() interrupt 1 { TH0=(65536-10000)\/256;TL0=(65536-10000)%256;switch(num){ case 0:P2=0x01;break;...

...然后用一个独立按键控制这个脉冲信号的启动与停止,可以循环操作_百度...
51单片机,用一个IO口模拟一个脉冲信号,然后用一个独立按键控制这个脉冲信号的启动与停止,可以循环操作 循环操作就是按一下IO口开始输出脉冲,再按一下脉冲停止,再按一下又开始输出脉冲。。。如此往复。脉冲信号我用定时器模拟的,但是用一个按键实在是不会控制启动和停止。初学者,困扰... 循环操作就是按一下IO...

stm32用一个按键控制两位数码管从00-99,代码怎么写
void delay(int k) \/\/最简单的C延时程序 { unsigned char i;while(k--) \/\/直至K减为0则跳出 {for(i=100;i>0;i--);} } ¥ 5.9 百度文库VIP限时优惠现在开通,立享6亿+VIP内容 立即获取 单片机_两个数码管显示00~99 \/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11...

单片机程序求修改,实现按键控制数码管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单片机,时钟想做个独立按键控制时间暂停,我用了定时器取反,但是每...
你将显示放main主循环里显示即可,还有,在你的按下去的按键按下里面,也加上显示函数不就可以显示了。

相似回答