数码管动态显示c语言
① 如何用c语言实现数码管显示数字12345和HELLO
看一下我编的123456 的显示,是共阴极数码管接P1口 ,用了两个74HC573锁存器段选位选,HELLO的编码表 你自己编一下,然后定义一个数组就可以了。我也刚学 ,加油!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0xfe,0xfd,0xfb,
0xf7,0xef,0xdf};
delay(uchar);
uchar a;
void main()
{
while(1)
{
for(a=6;a>0;a--)
{
wela=1;
P0=tablewe[6-a];
wela=0;
la=1;
P0=table[a];
la=0;
delay(1);
P0=0xff;
}
}
}
delay(uchar xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
② 四位一体共阳级数码管动态显示c语言编程
//满意请采纳
//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止
//使用时需采用锁存器
#include<reg52.h>
#include"stdio.h"
unsignedcharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharLEDbuff[]={0xff,0xff,0xff,0xff};
//定义数码管的位选段
sbitSEG_bit_1=P0^1;
sbitSEG_bit_2=P0^2;
sbitSEG_bit_3=P0^3;
sbitSEG_bit_4=P0^4;
unsignedintcnt=0;
unsignedintsec=0;
unsignedintmini=0;
unsignedinthour=0;
unsignedchari=0;
/*voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
*/
voidinterrupttimer0()interrupt1/*设置中断函数*/
{
TH0=0xfc;
TL0=0x18;
cnt++;
//P1=0x80;
//delay(1);
switch(i)
{
case0:SEG_bit_1=0;SEG_bit_4=1;P1=LEDbuff[0];i++;break;
case1:SEG_bit_4=0;SEG_bit_3=1;P1=LEDbuff[1];i++;break;
case2:SEG_bit_3=0;SEG_bit_2=1;P1=LEDbuff[2]&;i++;break;
case3:SEG_bit_2=0;SEG_bit_1=1;P1=LEDbuff[3];i=0;break;
default:break;
}
}
/************************************************
voidserial_init()
{
//TMOD=0x20;//定时器T/C1工作方式2
SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)
TH1=0xF3;//定时器初值高8位设置
TL1=0xF3;//定时器初值低8位设置
PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)
TR1=1;//定时器启动
}
**********************************************/
voidmain()
{
//serial_init();//串口初始化
//TMOD=0x21;/*设置定时器*/
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;
EA=1;/*设置中断*/
ET0=1;
while(1)
{
if(0==TF0)
{
if(cnt>=1000)
{
cnt=0;
sec++;
if(sec>=60){
sec=0;mini++;
if(mini>=60){
mini=0;hour++;
if(hour>=24)hour=0;
}
}
LEDbuff[0]=LED[sec%10];//*设置数码管显示位*/
LEDbuff[1]=LED[sec/10%10];
LEDbuff[2]=LED[mini%10];
LEDbuff[3]=LED[mini/10%10];
//TI=1;//使用printf函数前须先将发送标志位TI置1
//printf("%4d%x,%x%x ",sec,LEDbuff[0],LEDbuff[1],LEDbuff[2]);
//TI=0;
}
}
}
}
③ 如何用C语言编程控制数码管动态显示字符串
用仿真实现,采用6位一体的共阴数码管,P0口输出段码,P2口输出位码。仿真图如下:
程序如下
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0~9段码
0x77,0x7c,0x39,0x5e,0x79,0x71,};//共阴数码管A~F段码表
uchar buf[]={0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};//显示字母
void delay()//延时子程序
{
uint j;
for(j=300;j>0;j--);
}
void display()//显示子程序
{
uchar i,litbit=0xfe;
for(i=0;i<6;i++)
{
P2=litbit;//输出位码
P0=table[buf[i]];//输出段码
litbit=_crol_(litbit,1);
delay();//延时
}
}
void main()
{
while(1)
{
display();
}
}