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

51单片机的计数器1方式0为什么在Protues仿真不能实现计数功能?程序代码如下,求大神看一下.

#include<reg52.h> //包含52系列单片机头文件

#define uint unsigned int

#define uchar unsigned char //宏定义

sbit dula=P2^6; //申明单片机的P2.6口为段选锁存器的输入端

sbit wela=P2^7; //申明单片机的P2.7口为位选锁存器的输入端

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delayms(uint); //延时子函数

void display(uchar bai,uchar shi,uchar ge) //显示子函数

{

dula=1; //打开段选锁存器

P0=table[bai];//将计数值的百位数字送到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毫秒

}

void delayms(uint xms) //声明延时函数

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);//i=xms,即延时x毫秒

}

uint read()//读取计数值函数

{

uchar tl,th1,th2;

uint val;

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;//

return val;

}

void main()//主函数

{

uchar a,b,c;

uint num;

TMOD=0x40;//设定计数器1的工作方式为方式0(0100 0000)

TH1=0;

TL1=0;//给计数器0的高8位和低8位赋初值

TR1=1;//启动计数器1,开始计数

while(1)//大循环

{

num=read();//将读取计数器1函数的返回值放到num中

if(num>=100);//判断计数值是否达到了150次,如果没有则跳出

{

num=0;

TH1=0;

TL1=0;//如果达到了150次将计数值清0并将计数器0的低8位和高8位重新赋值,重新开始计数

}

a=num/100; //将计数值的百位分离出

b=num%100/10; //将计数值的十位分离出

c=num%10; //将计数值的个位分离出

display(a,b,c);//调用显示函数,显示计数值

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值