以前回答过这样的问题。
和本次稍有区别是:以前是用“两个独立按键控制”,启动和暂停,用一个按键控制。
现在,按照楼主的要求,进行了改动,程序如下。
//下面是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检验,截屏如下图。
求解单片机完成用三个按键控制三个发光二极管的控制系统,汇编语言
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...