51单片机单个数码管0-9循环秒计数
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机单个数码管0-9循环秒计数相关的知识,希望对你有一定的参考价值。
51单片机单位数码管0-9循环秒计数
- 51单片机:
AT89C52
、74HC595、单位共阴数码管、
74HC245、` - Proteus仿真
实例代码
/*********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; 其作用就是归零。
以上是关于51单片机单个数码管0-9循环秒计数的主要内容,如果未能解决你的问题,请参考以下文章
51单片机定时器累加计数(0000-9999)+4位数码管(循环显示)+Proteus仿真
51单片机定时器累加计数+2位数码管(循环显示00-99)+Proteus仿真