51单片机——数码管
原理图
位控制8个显示灯
段控制1个显示灯中的8个LED灯
下面为静态数码管实现代码
#include <reg52.h>//静态数码管代码
void delay(unsigned int z){//延时函数
unsigned int x,y;
for(x=z;x>0;x–)
for(y=114;y>0;y–);
}
sbit we=P2^7;//位选锁存器接口
sbit du=P2^6;//段选锁存器接口
void main(){
int a[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的十六进制数
int i;
for(i=0;i<10;i++){
we=1;//打开位选
P0=0xfe;//1111 1110,让最后一个数码管显示0-9;
we=0;//关闭位选
du=1;//打开段选
P0=a[i];//让这个数码管显示0-9;
delay(200);
du=0;//关闭段选
}
}
动态数码管的代码实现:
让8个数码管,轮流显示0-9
#include <reg52.h>//动态数码管代码
#include <intrins.h>//右移函数
void delay(unsigned int z){
unsigned int x,y;
for(x=z;x>0;x–)
for(y=114;y>0;y–);
}
sbit we = P2^7;
sbit du = P2^6;
void main()
{
int a[10]= {0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f };//显示0-9
int x=0xfe;//1111 1110,最后一个数码管亮
int i;
for(i=0;i<10;i++){
we=1;
P0=x;
we=0;
du=1;
P0=a[i];//显示某个数字
delay(200);
du=0;
x=crol(x,1);//让数码管显示右移
}
}
2.
//静态数码管
#include <reg52.h>
sbit we=P2^7;
sbit du=P2^6;
void delay(unsigned int z)
{
unsigned int i ,j;
for(i=z;i>0;i–)
for(j=114;j>0;j–);
}
void main()
{
int a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int i;
for(i=0;i<10;i++)
{
we=1;
P0=0xfe;
we=0;
du=1;
P0=a[i];
delay(200);
du=0;
}
}
2.
//动态数码管
#include <reg52.h>
#include <intrins.h>
sbit we=P2^7;
sbit du=P2^6;
void delay(unsigned int z)
{
unsigned int i ,j;
for(i=z;i>0;i–)
for(j=114;j>0;j–);
}
void main()
{
int a[9]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int i;
int x=0xfe;
for(i=0;i<9;i++)
{
we=1;
P0=x;
we=0;
du=1;
P0=a[i];
delay(200);
du=0;
x=crol(x,1);
}
}