单片机数码管延时一秒代码
时间: 2024-02-28 17:39:35 浏览: 55
以下是单片机数码管延时一秒的代码,以AT89C51为例:
#include <reg51.h>
void delay(void) //延时函数
{
int i, j;
for(i=0;i<10;i++)
for(j=0;j<20000;j++);
}
void main()
{
unsigned char num[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6}; //数码管0~9的编码,共阴极数码管
unsigned char i;
while(1)
{
for(i=0;i<10;i++)
{
P1 = num[i]; //将数码管对应的编码输出到P1口
delay(); //延时1秒
}
}
}
相关问题
51单片机用74hc164设计动态数码管一秒间隔从1闪烁到36的代码
本问题需要使用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口来控制数码管的显示。
51单片机使用共阴极数码管定时显示定时时长为一秒
您好,针对您的问题,可以使用以下的代码实现51单片机使用共阴极数码管定时显示定时时长为一秒:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x01,0x02,0x04,0x08,0x10}; // 数码管0-F及'-'的显示码
void delay(uint i) // 延时函数
{
uint j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num) // 数码管显示函数
{
uchar i,j,k;
i=num%10; // 个位
j=num/10%10; // 十位
k=num/100%10; // 百位
LSA=0; // 共阴极数码管,使能端为低电平
P0=smgduan[i]; // 输出个位显示码
delay(5); // 延时
LSA=1; // 关闭个位数码管
LSB=0;
P0=smgduan[j]; // 输出十位显示码
delay(5); // 延时
LSB=1;
LSC=0;
P0=smgduan[k]; // 输出百位显示码
delay(5); // 延时
LSC=1;
}
void main()
{
TMOD=0x01; // 定时器1工作在模式1下
TH1=(65536-1000)/256; // 计时1ms
TL1=(65536-1000)%256;
TR1=1; // 启动定时器1
while(1)
{
if(TF1==1) // 定时器1溢出
{
TF1=0; // 清除溢出标志
TH1=(65536-1000)/256; // 重新赋值计时1ms
TL1=(65536-1000)%256;
display(100); // 显示100ms
}
}
}
```
这段代码将使用定时器1实现1s的定时功能,当定时器溢出时,调用数码管显示函数`display()`,该函数将显示100ms,可以根据需要将其修改为1s即可。
需要注意的是,此代码使用的是共阴极数码管,如果使用共阳极数码管需要将相应的代码进行修改。