8位動態數碼管仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (18.74 KB, 下載次數: 42)
下載附件
2018-9-26 17:03 上傳
0.png (5.95 KB, 下載次數: 70)
下載附件
2018-9-26 17:04 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #include<ctype.h>
- #include<string.h>
- #include<math.h>
- #include<stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^0;
- sbit wela=P2^1;
- uint time=0;
- uint hh=23;
- uint mm=59;
- uint ss=49;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- void delayms(uint t)
- {
- uint i,j;
- for(i=t;i>0;i--)
- for(j=110;j>0;j--)
- ;
- }
- void print_string_LED(char* str)
- {
- uint len=strlen(str);
- uint index=strpos(str,'.');
- uchar t=0x7f;
- uint i=0;
- for(i=0;i<len;i++)
- {
- if(isdigit(str[len-i-1])==1)
- {
- P0=0xff;
- wela=1;
- P0=t;
- wela=0;
- P0=0x00;
- dula=1;
- if(i==len-index)
- P0=table[str[len-i-1]-'0']|0x80;
- else
- P0=table[str[len-i-1]-'0'];
- dula=0;
- }
- else if(isalpha(str[len-i-1])==1)
- {
- P0=0xff;
- wela=1;
- P0=t;
- wela=0;
- P0=0x00;
- dula=1;
- str[len-i-1]=tolower(str[len-i-1]);
- if(i==len-index)
- P0=table[str[len-i-1]-'a'+10]|0x80;
- else
- P0=table[str[len-i-1]-'a'+10];
- dula=0;
- }
- else if(str[len-i-1]=='-')
- {
- P0=0xff;
- wela=1;
- P0=t;
- wela=0;
- P0=0x00;
- dula=1;
- P0=0x40;
- dula=0;
- }
- else
- continue;
- t=_cror_(t,1);
- delayms(2);
- }
- }
- void main()
- {
- char str[9];
- char str_h[3];
- char str_m[3];
- char str_s[3];
- uchar i,j,k;
- TMOD=0x01;//計時器0以工作方式1計時
- EA=1;//打開全局中斷允許
- ET0=1;//打開定時器0中斷允許位
- TR0=1;//啟動定時器0
- TH0=55535/256;
- TL0=55535%256;
- while(1)
- {
- if(ss==60)
- {
- ss=0;
- mm++;
- }
- if(mm==60)
- {
- mm=0;
- hh=(++hh)%24;
- }
- sprintf(str_h,"%u",hh);
- sprintf(str_m,"%u",mm);
- sprintf(str_s,"%u",ss);
- i=0;
-
- //if(hh!=0)
- {
- for(i=0;str_h[i]!='\0';i++)
- str[i]=str_h[i];
- str[i++]='-';
- }
- //if(mm!=0)
- {
- for(j=0;str_m[j]!='\0';j++)
- str[i++]=str_m[j];
- str[i++]='-';
- }
- for(k=0;str_s[k]!='\0';k++)
- str[i++]=str_s[k];
- str[i]='\0';
- print_string_LED(str);
- }
- }
- void ET_T0() interrupt 1
- {
- TH0=55535/256;
- TL0=55535%256;
- time++;
- if(time==100)
- {
- ss++;
- time=0;
- }
- }
復制代碼
所有資料51hei提供下載:
八位數碼管.zip
(21.89 KB, 下載次數: 83)
2018-9-26 10:22 上傳
點擊文件名下載附件
附件 下載積分: 黑幣 -5
|