×
单片机 > 单片机程序设计 > 详情

数码管位移显示C语言程序设计

发布时间:2020-08-21 发布时间:
|
#include //51芯片管脚定义头文件 

#include //内部包含延时函数 _nop_();

#define uchar unsigned char 
#define uint unsigned int

uchar code ledcode[11] ={ 0xC0,0xF9,0xA4,0xB0,0x99, 
0x92,0x82,0xF8,0x80,0x90,0xff };

uchar data display[9]={10,10,10,10,10,10,10,10,10};

uchar shift,n;

/********************************************************/ 
/* */
/* 延时函数 */
/* */ 
/********************************************************/

void delayms(uint ms)


uchar t; 
while(ms--) 
{

for(t = 0; t < 120; t++); 

}

/**********************************************************

 数据交换函数(向左移动)

**********************************************************/

void exchange1() 

uchar i;

for(i=1; i<9; i++)

 { 
display[i] = i; 
delayms(1000);


 } 
}

/**********************************************************

 数据交换函数(向右移动)

**********************************************************/

void exchange2() 

uchar i,j;

for(j=0; j<8; j++) 
{ for(i=0; i<8; i++) 
{


display[i]=display[i+1]; 

display[8]=10; 
delayms(1000);



}

/**********************************************************

 主函数

**********************************************************/

void main(void)


uchar times; 
P0=0xff; 
P2=0xff; 
n=0; 
shift=0xfe; 
times=8;

 TMOD = 0x01; //定时器T0工作方式1 
TH0 = 0xfc; //1ms定时常数 
TL0 = 0x66; 
IE = 0x82; //允许定时器T0中断 
TR0 = 1; //启动定时器T0


while(1)

 { 
exchange1(); 
delayms(1000); //停止滞留时间


 exchange2(); 
delayms(1000); //停止滞留时间 

}
/**********************************************************

 中断服务函数

**********************************************************/

void leddisplay() interrupt 1


TH0 = 0xFC; //1ms定时常数 
TL0 = 0x66; 
n++; 
P0=ledcode[display[n]]; //送段码 
P2=shift; //送位码 
shift=shift<<1|0x01; //修改位码 
if(n>8) 
{
 n=0; 
shift=0xfe; 

}

/*********************************************************/

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 TIMER2的使用