51单片机单个数码管0-9循环秒计数

51单片机单位数码管0-9循环秒计数


  • 🎬Proteus仿真演示:
    在这里插入图片描述

  • 🔖硬件电路搭建器件:AT89C5274HC595、单位共阴数码管、74HC245、`

  • Proteus仿真:0 -9数字显示流水。

📝实例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/\*\*\*\*\*\*\*\*\*51单片机单位数码管0-9循环秒计数\*\*\*\*\*\*\*\*\*\*\*/
#include <reg51.H>
#define uint unsigned int
#define uchar unsigned char
sbit HC595_DIO = P1^0;
sbit HC595_SCLK = P1^1;
sbit HC595_RCLK = P1^2;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管段码0~f
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管位码

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*1ms延时子程序(12MHz)\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void delayms(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=125;j>0;j--);
}
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 向HC595发送一个字节函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void Send\_595(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
HC595_DIO=(dat&0x80)>>7;//由高位到低位赋值数据输出端
HC595_SCLK = 1; //移位时钟
HC595_SCLK = 0;
dat <<= 1; //dat左移一位
}
}
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 数码管显示函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void DisplayScan()
{
static uchar i=0;
Send\_595(dis_buf[i]);//向HC595发送位码(共阴数码管)
Send\_595(table[i]); //向HC595发送段码(共阴数码管)
// Send\_595(~dis\_buf[i]);//向HC595发送位码(共阳数码管)
// Send\_595(~table[i]); //向HC595发送段码(共阳数码管)
HC595_RCLK = 1; //锁存输出数据
HC595_RCLK = 0;
i++;
i%=10;
}

void main()
{
HC595_SCLK = 0; //初始化移位时钟端
HC595_RCLK = 0; //初始化锁存输出端
while(1)
{
DisplayScan(); //数码管显示函数
delayms(1000); //延时1ms
}
}

相关代码解释
  • i%=10;: i%=10 等于 if(i>=10)i=0; 其作用就是归零。