|
弄了好幾天都達(dá)不到想要的效果,所以想在這里向大家取取經(jīng)。
任務(wù):使用51單片機(jī)控制6位數(shù)碼管實時顯示時鐘,例如:當(dāng)前時間位17:30:25,數(shù)碼管則顯示173025。
我設(shè)置的初始時間是12:34:56。
但最后初始顯示的是5個6,然后是5個7,5個8……我覺得應(yīng)該是動態(tài)顯示那一部分寫的有問題,但是不知道該如何改,跪求大家指教!
順便說一下,數(shù)碼管是共陽極數(shù)碼管,P1口接的是段碼,P2口接的是位選碼。(位選碼我不知道自己連的對不對)
51hei.gif (77.63 KB, 下載次數(shù): 17)
下載附件
2023-1-28 19:15 上傳
單片機(jī)源程序如下:- #include<reg51.h>
- #include<intrins.h>
- unsigned char count=0;
- unsigned char miao=56,min=34,hour=12;
- void delay(unsigned int i)
- {
- unsigned int k;
- for(k=0;k<i;k++);
- }
- void delay1s()
- {
- unsigned char i;
- for(i=0;i<20;i++)
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- TR1=1;
- while(!TF1);
- TF1=0;
- }
- }
- void disp(unsigned char x,unsigned char y,unsigned char z)
- {
- unsigned int j;
- unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- for(j=0;j<6;j++)
- {
- P1=0xff;
- P2=_crol_(0xfe,j);
- switch(j)
- {
- case 0:P1=led[x/10];break;
- case 1:P1=led[x%10];break;
- case 2:P1=led[y/10];break;
- case 3:P1=led[y%10];break;
- case 4:P1=led[z/10];break;
- case 5:P1=led[z%10];break;
- default:break;
- }
- delay(100);
- }
- }
- void main()
- {
- TMOD=0x10;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1;
- EA=1;
- TR1=1;
- while(1)
- {
- disp(hour,min,miao);
- delay1s();
- miao++;
- if(miao==60)
- {
- miao=0;
- min++;
- if(min==60)
- {
- min=0;
- hour++;
- if(hour==24)
- hour=0;
- }
- }
- }
- }
復(fù)制代碼
|
-
-
源程序 原理圖.zip
2023-1-28 17:41 上傳
點擊文件名下載附件
107.36 KB, 下載次數(shù): 4
|