数码管时钟显示C程序.docVIP

  • 1
  • 0
  • 约1.37万字
  • 约 26页
  • 2016-10-07 发布于重庆
  • 举报
数码管时钟显示C程序

/* 数码管时钟显示led移动C 程序 使用共阳极数码管 */ #includereg52.h #includeintrins.h #define uint unsigned int #define uchar unsigned char sbit wela1 = P2^0; //数码管wela管脚定义 sbit wela2 = P2^1; sbit wela3 = P2^2; sbit wela4 = P2^3; uchar time,d1,d2,d3,d4,temp,tem,aa; unsigned char code table[] = {0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90}; void displ(char a,char b,char c,char d); void delay(uint z) //延时程序 { uint x,y; for(x=z;x0;x--) for(y=110;y0;y--); } //主函数 void main() { time=0; TMOD=0x01; //中断定时初始化 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; aa=0; temp=0xfe; tem=0xff; d1=0;d2=0;d3=0;d4=0; while(1) { if(time==20) { time=0; // 12个led灯移动显示 aa+=1; if(aa6) temp=_crol_(temp,1); if(aa==12) { aa=0; temp=0xfe; tem=0xff; } if(aa==6) { tem=0xfe; temp=0xff; } if(aa6) tem=_crol_(tem,1); // d4+=1; if(d4==10) { d4=0; d3+=1; } if(d3==6) { d3=0; d2+=1; } if(d2==10) { d2=0; d1+=1; } if(d1==6) { d1=0;d2=0;d3=0;d4=0; } } displ(d1,d2,d3,d4); P1=temp; P3=tem; } } //动态显示子程序 void displ(char a,char b,char c,char d) { wela1=0;wela2=0; wela3=0; wela4=0; P0=table[a]; wela1=1;wela2=0; wela3=0; wela4=0; delay(5); P0=table[b]; wela1=0;wela2=1; wela3=0; wela4=0; delay(5); P0=table[c]; wela1=0;wela2=0; wela3=1; wela4=0; delay(5); P0=table[d]; wela1=0;wela2=0; wela3=0; wela4=1; delay(5); } //中断定时程序 void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time ++; } 2010-12-17 双流 这个是51hei开发板专区里转来的一个程序,注释很详细,运行也没有问题,原文地址:/bbs/dispbbs.asp?boardid=10id=4140 /*动态数显的设计思路,首先是我们要先知道怎样才能使哪个位亮,显示的段是什么数值,接下来就是中断时间 的问题了,设计步骤如下,如果要让八个数码管静态显示1到8,我们可以修改中断时间

文档评论(0)

1亿VIP精品文档

相关文档