c语言程序怎么让数码管循环显示0123-9012再到0123然后数码管熄灭
1.首先你要有几个函数可以显示每个数码管数字
void led1Show(char dat);
void led2Show(char dat);
void led3Show(char dat);
void led4Show(char dat);
dat为你要显示的字符,函数是不是能复用,看你代码
2.再写一个统一显示的函数
void ledShow(int dat)//dat为你要显示的数字
{
led1Show(dat / 1000);
led2Show(dat % 1000 / 100);
led3Show(dat % 100 / 10);
led4Show(dat % 10);
}
3.在你的主函数中调用
int dat = 123;
while(1)
{
ledShow(dat);
dat++;
if(dat 9012)
dat = 123;
delay_ms(500);//加个延时,要不然会刷新太快。
}
数码管动态显示C语言程序
记得给分哦!
我这个程序是在ICCVC FOR AVR 那个编译器里编译成功的
//ICC-AVR application builder : 2010-3-15 11:14:29
// Target : M8
// Crystal: 4.0000Mhz
#include iom8v.h
#include macros.h
unsigned char const seg_table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void port_init(void)
{
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
/* 微秒级延时程序 */
void delay_us(int time)
{
do
{
time–;
} while (time1);
}
/* 毫秒级延时程序 */
void delay_ms(unsigned int time)
{
while(time!=0)
{
delay_us(1000);
time–;
}
}
void main()
{
unsigned char i;
init_devices();
while (1)
{
for (i=0;i10;i++)
{
PORTB=seg_table[i];
delay_ms(100);
}
}
}
数码显示的C语言程序
你要是静态显示,那就简单多了:
#define SEG_Port P1//数码管段选口,默认位选长通
unsigned char SEG_B_List[]={0xc0,0xf9,0xa4}; //共阳数码管代码表0-2
if(Key1==0) SEG_Port=SEG_B_List[1];
else if(Key2==0) SEG_Port=SEG_B_List[2];
else SEG_Port=SEG_B_List[0];
你要是动态显示,那就多了,不过,就一位,无需动态显示。
C语言数码管显示
把wei=_crol_(wei,1);改为wei=wei1 就可以了。。
我也有个程序 你可以参考下。。
#include reg51.h
sbitP2_0 = P2^0;
sbitP2_1 = P2^1;
sbitP2_2 = P2^2;
sbitP2_3 = P2^3;
sbitP2_4 = P2^4;
sbitP2_5 = P2^5;
sbitP2_6 = P2^6;
sbitP2_7 = P2^7;
/***********************************************************************************************/
const unsigned char led_code[20]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90,
0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X58,0X00,0X10};
//定义0~9以其带小数点的显示码
unsigned char led_reg[8]={1,9,10,11,12,13,14,15}; //定义显示数码缓存器
/************************************************************************************************
**function:delay(unsigned char i)
**功 能:延时程序
************************************************************************************************/
void delay(unsigned char i)
{unsigned char j,k;
for(k=0;ki;k++)
{for(j=0;j255;j++);
}
}
/************************************************************************************************
**function:led_show()
**功 能:显示函数
************************************************************************************************/
void led_show( )
{static unsigned char led_shift=0x00;//定义静态变量
P2=0xFF;//关闭数码管控制端口
P0=led_code[led_reg[led_shift]];//把字符代码送到P0端口
switch(led_shift)//选择数码管控制位
{case 0: P2_0=0;break;//控制左1数码管
case 1: P2_1=0;break;//控制左2数码管
case 2: P2_2=0;break;//控制左3数码管
case 3: P2_3=0;break;//控制左4数码管
case 4: P2_4=0;break;//控制左5数码管
case 5: P2_5=0;break;//控制左6数码管
case 6: P2_6=0;break;//控制左7数码管
case 7: P2_7=0;break;//控制左8数码管
default:break;
}
led_shift++;//数码管控制变量自加
if(led_shift==0x08)//判断是否扫描一轮
led_shift=0x00;//归零进行下一轮扫描
}
/************************************************************************************************
mian()
************************************************************************************************/
void main()
{P0=0X00;//P0端口输出低电平
P2=0XFF;//P2端口输出高电平
while(1)
{led_show();//调用显示函数
delay(10);//调用延时函数
}
}