51单片机用74hc164设计动态数码管一秒间隔从1闪烁到36的代码
时间: 2023-05-29 19:04:27 浏览: 98
单片机控制74HC595动态扫描数码管显示
本问题需要使用C语言编写代码,在51单片机上使用74hc164芯片设计动态数码管,让数码管每隔一秒从1闪烁到36。以下是代码示例:
```c
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9的显示码表
void delay(uint x) // 延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uchar i,j,k,flag;
flag=1;
while(1)
{
for(k=0;k<36;k++) // 数字从1到36依次闪烁
{
for(i=0;i<8;i++) // 8位数码管依次显示
{
P2=0x00; // 清空P2口
for(j=0;j<i;j++) // 每个数码管依次点亮
{
P2=_crol_(P2,1); // P2口左移一位
P2&=0xFE; // 将最高位清零,避免溢出
}
P0=table[k%10]; // 显示个位
delay(10); // 延时10ms
P0=table[k/10]; // 显示十位
delay(10); // 延时10ms
}
}
}
}
```
代码中使用了一个显示码表,将数字0-9的显示码存储在一个数组中。在主函数中,使用一个循环来让数码管从1到36依次闪烁。在每次循环中,使用一个嵌套循环来依次点亮8位数码管中的每个数码管,从而实现动态显示。其中使用了一个延时函数来控制数码管的显示速度。代码中使用74hc164芯片来控制数码管的显示,通过P2口来控制74hc164芯片的数据输入,P0口来控制数码管的显示。
阅读全文