数码显示实验报告C语言代码
时间: 2023-07-10 15:14:14 浏览: 52
以下是一个基本的数码管动态显示的C语言代码,仅供参考:
```
#include <reg52.h> //单片机头文件
#define uint unsigned int //定义无符号整型变量
#define uchar unsigned char //定义无符号字符型变量
//数码管的引脚定义
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit DIO=P1^0; //串行数据输入
sbit SCLK=P1^1; //串行时钟信号
//数码管显示的数据
uchar code smgduan[]=//0~F的显示码
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};
//延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//发送一个字节到数码管
void sendbyte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SCLK=0; //初始状态,时钟信号为低电平
DIO=dat&0x01; //将数据的最低位赋值给DIO
dat>>=1; //数据右移一位,准备发送下一位
SCLK=1; //时钟信号为高电平,上升沿发送数据
}
}
//设置数码管显示的位数和显示的数值
void setpos(uchar pos,uchar dat)
{
LSA=1; //锁存器输入方式为并行输入
LSB=1;
LSC=1;
sendbyte(0x44); //发送设置命令
LSA=0; //锁存器输入方式切换为单个输入
sendbyte(pos<<1); //设置要显示的数码管位置
sendbyte(dat); //设置要显示的数值
}
void main()
{
uchar i,j;
while(1)
{
for(i=0;i<8;i++) //依次显示八个数码管
{
setpos(i,smgduan[i]); //设置要显示的数码管位置和数值
delay(500); //延时,控制数码管动态显示的速度
}
}
}
```
这个代码通过循环依次控制八个数码管的显示,同时实现了数码管动态显示的效果。在实际应用中,可以根据需要进行修改和优化。