#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) //取千位数 { selectDuan=1; //先发送段字符 P1=displayNum[z%100000/10000]; selectDuan=0; selectWei=1; //再开通位选 可消除重影 P0=selectPin[0]; selectWei=0; delay(); } if(z>999) //取千位数 { selectDuan=1; P1=displayNum[z%10000/1000]; selectDuan=0; selectWei=1; P0=selectPin[1]; selectWei=0; delay(); } if(z>99) //取百位数 { selectDuan=1; P1=displayNum[z%1000/100]; selectDuan=0; selectWei=1; P0=selectPin[2]; selectWei=0; delay(); } if(z>9) //取十位数 { selectDuan=1; P1=displayNum[z%100/10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); } /* if(z>0) //取个位数 { 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计数。两个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) //取千位数 { selectDuan=1; //先发送段字符 P1=displayNum[z%100000/10000]; selectDuan=0; selectWei=1; //再开通位选 可消除重影 P0=selectPin[0]; selectWei=0; delay(); } if(z>999) //取千位数 { selectDuan=1; P1=displayNum[z%10000/1000]; selectDuan=0; selectWei=1; P0=selectPin[1]; selectWei=0; delay(); } if(z>99) //取百位数 { selectDuan=1; P1=displayNum[z%1000/100]; selectDuan=0; selectWei=1; P0=selectPin[2]; selectWei=0; delay(); } if(z>9) //取十位数 { selectDuan=1; P1=displayNum[z%100/10]; selectDuan=0; selectWei=1; P0=selectPin[3]; selectWei=0; delay(); } /* if(z>0) //取个位数 { 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++); } |
首先你要知道锁存器是怎么工作的,然后会数码管静态,动态显示。锁存器的原理如图,代码自己写吧C:\Users\Administrator\Desktop |
本帖最后由 zl2168 于 2017-9-9 17:09 编辑 统计T0引脚上10分钟内的脉冲数 ![]() ![]() 先Proteus仿真一下,确认有效。以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版. 书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。 |
这是要程序。。。 |