1、新建项目,做好准备。
2、数码管段选表。
3、延时函数。
4、uchar i变量i;wk = 1打开位选,P0 = 0xf71111 0111第4位数码管显示,wk = 0关闭位选。
5、while(1) //死循环效果{} 。
6、dk = 1//打开段选,P0 = leddata[i],dk = 0//关闭段选,delay(100)//延时效果。
7、选择效果,限制i值的循环范围。
以下是一份简单的C51程序,能够实现静态数码管的显示:```c
#include <reg51.h>
// 数码管码表
unsigned char code LED[] = {
0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90
}
void delay(unsigned int t) {
unsigned int i, j
for (i = 0i <ti++) {
for (j = 0j <1200j++)
}
}
void main() {
unsigned char i, cnt
// 定义P1口为输出端口
P1 = 0x00
while(1) {
cnt = 0
// 循环显示0~9
for (i = 0i <10i++) {
P1 = LED[i]
delay(500)
cnt++
if (cnt == 4) {
cnt = 0
P1 = 0
delay(500)
}
}
}
}
```
这份程序中,首先定义了静态数码管的码表,然后通过循环依次将每个数码管的码值赋值给P1口进行显示,同时控制最后一个数码管不同步显示,即循环显示四个数码管后关闭所有数码管的显示,再等待一段时间后才开始下一轮的显示。
在具体的硬件实现中,需要将P1口连接到数码管的控制芯片的输入口上,同时还需要设置好时钟等系统参数。
/* ch03-3-4.c - 七段LED数码管实验程序 *///==声明区=================================================
#include<reg51.h>//定义8051寄存器的头文件,P2-17~19
#define SEG P0 //定义七段LED数码管接至Port 0
/*声明七段LED数码管驱动信号数组(共阳)*/
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4
0x92,0x83,0xf8,0x80,0x98}//数字5-9
void delay(int) //声明延迟函数
//==主程序==========================================
main() //主程序开始
{ unsigned char i//声明无符号变量i
while(1)//无穷循环,程序一直跑
for(i=0i<10i++) //显示0-9,共10次
{ SEG=TAB[i]//显示数字
delay(500) //延迟500×1m=0.5秒
} //for循环结束
} //主程序结束
//==子程序==========================================
/* 延迟函数,延迟约x×1ms */
void delay (int x) //延迟函数开始
{int i,j //声明整形变量i,j
for (i=0i<xi++) //计数x次,延迟x×1ms
for (j=0j<160j++) //计数120次,延迟1ms
} //延迟函数结束
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)