基于宏景科技的stc实验箱4,hc595,编写C语言实现8个7段数码管同时显示相同的数字0-9,并每隔1秒变换一次;
时间: 2023-12-14 12:02:32 浏览: 78
——自动生成绩效反馈表-e-PM全员绩效管理解决方案
好的,以下是C语言代码实现:
```
#include<reg52.h> //头文件
#include<intrins.h>
#define uchar unsigned char //宏定义
sbit SRCLK=P2^0; //74HC595引脚定义
sbit RCLK=P2^1;
sbit SER=P2^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管0~9显示段码表
void delay(unsigned int i) //延时函数
{
while(i--);
}
void hc595_sendbyte(uchar dat) //74HC595发送函数
{
uchar i;
for(i=0;i<8;i++) //共8位
{
SRCLK=0; //时钟线置低
SER=dat&0x80; //取最高位
dat<<=1; //左移一位,准备取下一位
SRCLK=1; //时钟线置高
}
RCLK=0; //输出锁存器置低
RCLK=1; //输出锁存器置高,放入数据
RCLK=0; //输出锁存器置低
}
void display(int n) //数码管显示函数
{
int i; //循环计数变量
for(i=0;i<8;i++) //共8个数码管
{
hc595_sendbyte(~table[n%10]); //显示个位数字,需要取反
hc595_sendbyte(1<<i); //打开对应的数码管,位运算
delay(500); //延时一段时间
hc595_sendbyte(0x00); //关闭显示
n/=10; //除以10后取整,显示十位数字
}
}
void main()
{
int i=0; //计数变量
while(1)
{
display(i); //调用数码管显示函数
i++;
if(i==10) //0~9循环显示
i=0;
delay(1000); //每隔1秒变换一次
}
}
```
注:代码中使用了STC89C52单片机和74HC595移位寄存器,需要根据实际情况修改引脚。
阅读全文