c语言数码管按键计数,数码管60S计数显示--C语言

原标题:数码管60S计数显示--C语言

//

unsigned char code Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//显示0~9的段码表

unsigned char int_time; //记录中断次数

unsigned char second; //储存秒

/***********************************************************************

函数功能:快速动态扫描延时,延时约0.6毫秒

************************************************************************/

void delay(void)

{

unsigned char i;

for(i=0;i<200;i++)

;

}

/***********************************************************************

函数功能:显示秒

入口参数:k

出口参数:无

************************************************************************/

void DisplaySecond(unsigned char k)

{

P2=0xbf; //P2.6引脚输出低电平, DS6点亮

P0=Tab[k/10]; //显示十位

delay();

delay();

delay();

delay();

delay();

delay();

delay();

delay();

P2=0x7f; //P2.7引脚输出低电平, DS7点亮

P0=Tab[k%10]; //显示个位

delay();

delay();

delay();

delay();

delay();

delay();

delay();

delay();

P2=0xff; //关闭所有数码管

P0=0xff; //显示个位

delay();

delay();

delay();

delay();

delay();

delay();

delay();

delay();

}

void main(void) //主函数

{

TMOD=0x01; //使用定时器T0

TH0=(65536-46083)/256; //将定时器计时时间设定为46083×1.085微秒

//=50000微秒=50毫秒

TL0=(65536-46083)%256;

EA=1; //开启总中断

ET0=1; //定时器T0中断允许

TR0=1; //启动定时器T0开始运行

int_time=0; //中断次数初始化

second=0; //秒初始化

while(1)

{

DisplaySecond(second); //调用秒的显示子程序

}

}

//********************************************************

//

//*******************************************************

void interserve(void ) 1 using 1

{

TR0=0; //关闭定时器T0

int_time ++; //每来一次中断,中断次数int_time自加1

if(int_time==20) //够20次中断,即1秒钟进行一次检测结果采样

{

int_time=0; //中断次数清0

second++; //秒加1

if(second==60)

second =0; //秒等于60就返回0

}

TH0=(65536-46083)/256; //重新给计数器T0赋初值

TL0=(65536-46083)%256;

TR0=1; //启动定时器T0

}

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于51单片机和C语言按键计数程序,同时使用位数码管显示计数结果: ```c #include <reg52.h> sbit Key = P3^2; sbit LSA = P2^2; sbit LSB = P2^3; sbit LSC = P2^4; unsigned int Count = 0; unsigned char DisplayBuffer[2] = {0, 0}; void Delay(unsigned int i) // 延迟函数 { while(i--); } void WriteMax7219(unsigned char address, unsigned char dat) // 向数码管写入数据 { LSC = 0; for(int i = 0; i < 8; i++) { if(i == 0) LSA = 1; else if(i == 1) LSB = 1; else if(i == 2) LSC = 1; else { P1 = ((address << 8) + dat) >> (i - 3); Delay(1); P3 = 0x01; Delay(1); P3 = 0x00; } } } void InitializeMax7219() // 初始化数码管 { WriteMax7219(0x09, 0x00); // 译码方式:BCD码 WriteMax7219(0x0a, 0x03); // 亮度 WriteMax7219(0x0b, 0x07); // 扫描界限 WriteMax7219(0x0c, 0x01); // 关闭掉电模式 WriteMax7219(0x0f, 0x00); // 显示测试:正常显示 } void DisplayCount() // 显示计数结果 { DisplayBuffer[0] = Count % 10; DisplayBuffer[1] = Count / 10; WriteMax7219(1, DisplayBuffer[0]); WriteMax7219(2, DisplayBuffer[1]); } void main() { InitializeMax7219(); // 初始化数码管 while(1) { if(Key == 0) // 按键检测 { Delay(1000); // 延时去抖 if(Key == 0) { Count++; // 计数器加1 DisplayCount(); // 显示计数结果 Delay(1000); // 延时去抖 while(Key == 0); } } } } ``` 本程序使用 `P3^2` 作为按键输入,使用 `P2^2~P2^4` 控制数码管位选,使用 `P1` 控制数码管数据,使用 `P3^0` 控制数码管时钟。本程序使用数码管芯片 MAX7219 实现驱动,具体的 MAX7219 驱动原理请参考相关文献。 在主循环中,程序会不断检测按键是否按下,如果按下则计数器加1,并显示计数结果。需要注意的是,有时按键可能会出现抖动,因此程序中使用了一个简单的延时去抖算法来解决这个问题。 最后,本程序实现的是一个简单的计数器,如果需要实现更多功能,例如清零、加减、多位数码管显示等,可以在本程序的基础上进行扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值