求大神编程 <单片机 计数器控制> 要求对按键次数进行记录 并在数码管上显示 能按复位键复位 帮我改改51单片机控制数码管对按键次数0-99计数的编程啊~...

作者&投稿:段俩 (若有异议请与网页底部的电邮联系)
给一个我以前写的一个程序你参考参考,内容差不多

/****************************************************************
利用定时器0工作方式1,实现如下功能: *
用一根导线一段接地,另一端去接触T0(P3.4)引脚,每接触一下, *
计数器记一次数,并将所记的数实时显示在数码管上,计满100清零 *
*****************************************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

/* 0~9编码 */
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/* 延时函数 */
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/* 显示函数,将计数值实时显示在数码管上 */
void display(uchar shi, uchar ge)
{
P2 = 1;
P0 = 0xff; // 消影
P0 = table[shi]; //显示秒十位
delay(10); //短暂延时

P2 = 3;
P0 = 0xff;
P0 = table[ge]; //显示秒个位
delay(10);

}
/**************************************************************************
读取运行中计数器寄存器中的值,由于该寄存器的值会随时变化, *
若只读一次,当发生进位时,很可能会读错数据,因此TH0寄存器的值需要读两次, *
以确保读取的时候没有发生进位。 *
*
操作时,先读取TH0一次,再读取TL0一次,然后在读取TH0一次,比较两次TH0的值 *
如果两次读取的TH0的值相同,说明TL0没有向TH0进位。 *
***************************************************************************/
uint read(void)
{
uchar tl, th_1, th_2;
uint val;
while(1)
{
th_1 = TH0; // 第一次读取TH0
tl = TL0; // 读取TL0
th_2 = TH0; // 第二次读取TH0
if(th_1 == th_2) // 若两次TH0的值相同,说明无进位,跳出
break;
}
val = th_1*256 + tl; // 获取计数器中存储的计数值
return val; // 返回计数值
}

void main(void)
{
uchar a, b;
uint num;
TMOD = 0x05; // 定时器0工作在方式1
TH0 = 0; // 初始化,清空TH0
TL0 = 0; // 初始化,清空TL0
TR0 = 1; // 启动定时/计数器0
while(1)
{
num = read();
if(num >= 100) // 若计数到100清零
{
num = 0; // 清空num
TH0 = 0; // 清空TH0
TL0 = 0; // 清空TL0
}
a = num/10; // 获取十位
b = num%10; // 获取个位
display(a, b);
}
}

【广东理工学院】机器人编程什么专业专业,开创智能新时代~