/* ch03-3-4.c - 七段LED数码管实验程序 */
//==声明区=================================================
#includereg51.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=0;i10;i++) //显示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=0;ix;i++) //计数x次,延迟x×1ms
for (j=0;j160;j++); //计数120次,延迟1ms
} //延迟函数结束
数码管需要的工作电流大,单片机的驱动电流不够。一般的做法,就是利用单片机的输出,做三极管的基极驱动,然后让三极管的发射极做输出的驱动,输出更高的电压和大的电流。这样才能驱动数码管的显示。
所以工作中,一般选择共阳的。一段接电源,负端接单片机,但是为了增加驱动,一般也把单片机的输出口经过一个非门后,接数码管的负极。这样电路的输出电流和电压才能达到要求。
希望能对你
有用!!
这要看你的数码管是共阴还是共阳的哈。还有和单片机IO口的链接情况。然后对应IO口将相应的''0-F编码。
如下面是我的开发板的一位数码管的显示程序,你在上面做些修改就是了哈!
#include reg51.h
#include intrins.h
#define NOP() _nop_() /* 定义空指令 */
void delay(unsigned int i); //函数声名
// 此表为 LED 的字模
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
main()
{
unsigned int LedNumVal=1 ,C ; //定义变量
while(1)
{
if (++C= 300)
{ LedNumVal++ ; //每隔300个扫描周期加一次
C =0; //每隔300个扫描清零
}
// 将字模送到P0口显示
P0 = LED7Code[LedNumVal%10]0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
delay(150); //调用延时程序
}
}
/*****************************************************************
* *
* 延时程序 *
* *
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i 0; i--)
for(j = 200; j 0; j--);
}
单片机7段的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机7段