问答

汇集网友智慧,解决技术难题

jyzhzn

TA的家园币:157  

  • 51单片机的计数器1方式0为什么不能实现计数功能?

    51单片机的计数器1方式0为什么在Protues仿真不能实现计数功能?程序代码如下,求大神看一下.#include//包含52系列单片机头文件#defineuintunsignedint#defineucharunsignedchar//宏定义sbitdula=P2^6;//申明单片机的P2.6口为段选锁存器的输入端sbitwela=P2^7;//申明单片机的P2.7口为位选锁存器的输入端ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayms(uint);//延时子函数voiddisplay(ucharbai,ucharshi,ucharge)//显示子函数{dula=1;//打开段选锁存器P0=table;//将计数值的百位数字送到P0口dula=0;//关闭段选锁存器P0=0xff;//送位选信号前关闭所有显示wela=1;//打开位选锁存器P0=0xfe;//第一位数码管显示wela=0;//关闭位选所存器delayms(50);//调用延时函数延时50毫秒dula=1;//打开段选锁存器P0=table[shi];//将计数值的十位数字送到P0口dula=0;//关闭段选锁存器P0=0xff;//送位选信号前关闭所有显示wela=1;//打开位选锁存器P0=0xfd;//第二位数码管显示wela=0;//关闭位选所存器delayms(50);//调用延时函数延时50毫秒dula=1;//打开段选锁存器P0=table[ge];//将计数值的个位数字送到P0口dula=0;//关闭段选锁存器P0=0xff;//送位选信号前关闭所有显示wela=1;//打开位选锁存器P0=0xfb;//第三位数码管显示wela=0;//关闭位选所存器delayms(50);//调用延时函数延时50毫秒}voiddelayms(uintxms)//声明延时函数{uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);//i=xms,即延时x毫秒}uintread()//读取计数值函数{uchartl,th1,th2;uintval;while(1)//大循环{th1=TH1;//读取计数器1的高8位tl=TL1;//读取计数器1的低8位th2=TH1;//再次读取计数器1的高8位if(th1==th2)//判断计数器的低8位是否向高8位产生了进位break;//如果产生了进位再次读取计数器的高8位和低8位,如果没有则跳出循环}val=th1*32+tl;//returnval;}voidmain()//主函数{uchara,b,c;uintnum;TMOD=0x40;//