51单片机 0-99计数器 一个按键 按一下加一 按两下减一 按三下清零 电路图和程序

作者&投稿:锺斌 (若有异议请与网页底部的电邮联系)
倾家荡产求单片机C语言程序:0~99秒计数器;三个独立按键控制,P1.1开始 P1.2暂停P1.3清零 2个数码管显示~

以前回答过这样的问题。
和本次稍有区别是:以前是用“两个独立按键控制”,启动和暂停,用一个按键控制。
现在,按照楼主的要求,进行了改动,程序如下。
//下面是00-99秒计数的语言C程序。
#include
#include
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检验,截屏如下图。

http://blog.163.com/asm_c/blog/static/2482031132011522440151/

是不是类似这样的。

http://blog.163.com/asm_c/blog/static/248203113201311160320541/

汇编语言。

51单片机 0-99计数器,一个按键,按一下加一,那只能是自动加1啦,不然再按一个就变成减1,再按3下清0了。按两下减一,也应该是自动减1啦。 按三下清零。

仿真图




吴兴区18149405412: 用单片机c51,c语言编00 - 99计数器程序!谢谢!! -
闾育芪蓉: 这个以前做过,给:#include <AT89X51.H> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Count;void delay10ms(void) { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }void main(void) { ...

吴兴区18149405412: 设计十进制0 - 99的计数器,采用按键计数,数码管显示,采用单片机内部的定时计数器完成计数功能 -
闾育芪蓉: 看这个,跟你要求的差不多 ,你自己稍稍改下就OK啦~\(≧▽≦)/~ #include#define uchar unsigned char #define uint unsigned int uchar DSY_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; uchar count=0; void main() ...

吴兴区18149405412: 你刚才回答的那个0 - 99计数问题,求汇编语言. -
闾育芪蓉: ;0~99 P3.0 清0键 ORG 00H AJMP MAIN ORG 30H MAIN:MOV DPTR,#TAB MOV TMOD,#06H MOV TH0,#00H MOV TL0,#00H SETB TR0 KEY:ACALL DISP JB P3.0,$-2 ACALL DISP JNB P3.0,$-2 MOV TL0,#0 AJMP KEY DISP:MOV A,TL0 ;...

吴兴区18149405412: C51单片机,一组共阴极数码管,带按钮开关的,按开关开始启动,从00开始数,数到99归零再重来 -
闾育芪蓉: 用中断函数,选择电平触发模式,按下键盘为低电平执行中断子程序(num=0);其他你只要用定时计数器可以轻松实现

吴兴区18149405412: 修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现暂停,第二次按按键,实现复位
闾育芪蓉: <p>#include<reg52.h></p> <p>#include<intrins.h></p> <p>#define uint unsigned int</p> <p>#define uchar unsigned char</p> <p>sbit KEY = P3^0;</p> <p>uchar aa,num,flag;</p> <p>uchar code table[]={</p> <p> 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x...

吴兴区18149405412: 实现0到99通过单片机内部的定时计数器完成计数功能的汇编程序 -
闾育芪蓉: SECOND EQU 30H COUNT EQU 31H ORG 00H LJMP START ORG 0BH ;定时器0中断入口 LJMP INT_T0 START: MOV SECOND,#00H MOV COUNT,#00H MOV DPTR,#TABLE ;段码表首地址 MOV P0,#3FH ;数码管显示初始化 MOV P2,#...

吴兴区18149405412: 问:求单片机c语音编写:计时器,要求两个数码管.从0计时到99.有启动/开关,同一个按钮. 复位键 -
闾育芪蓉: #include #define uchar unsigned char #define uint unsigned int uint num; uchar code seg...

吴兴区18149405412: 就是按钮按一下,数码管从0开始加1,加到9,用c语言单片机编写并且要用计数器的方法编写. -
闾育芪蓉: #include<reg52.h> #define uchar unsigned char sbit P32=P3^2; uchar num[10]={0xc0,0x5b}; /* 具体值记不得了,可以百度,就是0-9,这里就写了俩还不一定是对的,就那意思 */void delay50us(void) {uchar i,j; for(i=0;i<100;i++){for(j=0;j<19;...

吴兴区18149405412: 51单片机计数器怎么用 -
闾育芪蓉: 可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断.进入计数服务中断程序.

吴兴区18149405412: 51单片机用计数器中断实现100以内的按键计数,汇编语言程序是怎样的,能帮忙一下么,谢谢啦... -
闾育芪蓉: ORG 0000H LJMP MAIN ORG 0003H LJMP EXTINT0 ORG 0030H MAIN:MOV SP,#5FH ;堆栈顶设为5FHSETB EA ;开中断SETB IT0 ;外部中断0沿触发SETB EX0 ;开外部中断0MOV 30H,#0 ;计数初值为0SJMP $ ;死循环 EXTINT0:INC 30H ;计数器加1RETI ;中断返回END

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网