![]() |
#include<reg52.h> sbit selectWei=P2^7; sbit selectDuan=P2^6; unsigned char code selectPin[]={0x0e,0x0d,0x0b,0x07}; unsigned char code displayNum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int a; unsigned int number; void outPutNumber(unsigned int); void delay(); void main() { number=0; while(1) { outPutNumber(number); number++; } } void outPutNumber(unsigned int z) { if(z>9999) //取千位數(shù) { selectDuan=1; //先發(fā)送段字符 P1=displayNum[z%100000/10000]; selectDuan=0; selectWei=1; //再開通位選 可消除重影 P0=selectPin[0]; selectWei=0; delay(); } if(z>999) //取千位數(shù) { selectDuan=1; P1=displayNum[z%10000/1000]; selectDuan=0; selectWei=1; P0=selectPin[1]; selectWei=0; delay(); } if(z>99) //取百位數(shù) { selectDuan=1; P1=displayNum[z%1000/100]; selectDuan=0; selectWei=1; P0=selectPin[2]; selectWei=0; delay(); } if(z>9) //取十位數(shù) { selectDuan=1; P1=displayNum[z%100/10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); } /* if(z>0) //取個位數(shù) { selectDuan=1; P1=displayNum[z%10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); }*/ } void delay() { int i,j; for(i=0;i<10;i++) for(j=0;j<110;j++); } |
給你程序自己修改吧,只是這個程序里是自動加1計數(shù)。兩個573用來片選和段選分別鎖存。 #include<reg52.h> sbit selectWei=P2^7; sbit selectDuan=P2^6; unsigned char code selectPin[]={0x0e,0x0d,0x0b,0x07}; unsigned char code displayNum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int a; unsigned int number; void outPutNumber(unsigned int); void delay(); void main() { number=0; while(1) { outPutNumber(number); number++; } } void outPutNumber(unsigned int z) { if(z>9999) //取千位數(shù) { selectDuan=1; //先發(fā)送段字符 P1=displayNum[z%100000/10000]; selectDuan=0; selectWei=1; //再開通位選 可消除重影 P0=selectPin[0]; selectWei=0; delay(); } if(z>999) //取千位數(shù) { selectDuan=1; P1=displayNum[z%10000/1000]; selectDuan=0; selectWei=1; P0=selectPin[1]; selectWei=0; delay(); } if(z>99) //取百位數(shù) { selectDuan=1; P1=displayNum[z%1000/100]; selectDuan=0; selectWei=1; P0=selectPin[2]; selectWei=0; delay(); } if(z>9) //取十位數(shù) { selectDuan=1; P1=displayNum[z%100/10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); } /* if(z>0) //取個位數(shù) { selectDuan=1; P1=displayNum[z%10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); }*/ } void delay() { int i,j; for(i=0;i<10;i++) for(j=0;j<110;j++); } |
首先你要知道鎖存器是怎么工作的,然后會數(shù)碼管靜態(tài),動態(tài)顯示。鎖存器的原理如圖,代碼自己寫吧C:\Users\Administrator\Desktop |
本帖最后由 zl2168 于 2017-9-9 17:09 編輯 統(tǒng)計T0引腳上10分鐘內的脈沖數(shù) ![]() ![]() 先Proteus仿真一下,確認有效。以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版. 書中電路和程序設計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。 |
這是要程序。。。 |