调试-单片机60秒计数器问题

问题描述

单片机60秒计数器问题

主要是我调试的时候,我的count要80才能是正常的一秒而不是20,还有就是main函数的if(time==60)
time=0;
shi=time/10;
ge=time%10;
能不能调到中断哪里啊??
#include
#define uchar unsigned char

#define GPIO_DIG P0 //????
sbit a=P1^2;
sbit b=P1^3;//????

unsigned char code DIG_CODE[] = {
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//0??1??2??3??4??5??6??7??8??9??A??b??C??d??E??F????????
uchar time=0,count=0;
uchar ge,shi;
void delay(unsigned int i);
void display(shi,ge);
void init();
void delay(unsigned int i) //?¨?±????
{ unsigned int j;
for(;i>0;i--)
for(j=0;j<333;j++)
{;}
}
void display(shi,ge) //????????????
{

b=1;
GPIO_DIG= DIG_CODE[shi];
b=0;
delay(1);
a=1;
GPIO_DIG= DIG_CODE[ge];
a=0;
delay(1);
}

void main()
{
//c=0;
init();
while(1)
{

if(time==60)
time=0;
shi=time/10;
ge=time%10;
display(shi,ge);
}

}
void t0_func() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==100)
{
count=0;
time++;

}

}
void init()
{
a=0;
b=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
time=0;
count=0;
}

解决方案

可以的,如果放到中断中建议变量加修饰词volatile,不过建议不要放在中断中,因为中断服务子程序的一个设计原则就是尽量简单

解决方案二:

可行,但是我一般就是在中断程序中改改值,不做过多的判断,这样就可以使中断程序尽可能执行短的时间

解决方案三:

//1:用AT89C51单片机的定时/计数器T0产生一秒的??//定时时间,作为秒计数时间,当一秒产生时,秒?//计数加1,秒计数到60时,自动从0开始。单片机?//晶振频率为12MHZ?#include?
#define?uchar?unsigned?char?#define?uint?unsigned?int?
uchar?code?table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,??????0x6f};?
void?display(uchar?fen,uchar?miao);?uchar?a,fen,miao,shu;?void?delay(uint?z);?void?init();?void?main()?{??init();??while(1)??{?
??display(fen,miao);?????}??}?
void?timer0()?interrupt?1?{?
?TH0=(65536-50000)/256;??TL0=(65536-50000)%256;??a++;??if(a==20)??{?????a=0;????shu++;????fen=shu/10;????miao=shu%10;????if(shu==60)?????shu=0;??}??}??
void?init()?{?
?TMOD=0x01;?

   var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);

?TH0=(65536-50000)/256;??TL0=(65536-50000)%256;??EA=1;??ET0=1;??TR0=1;?}?
void?display(uchar?fen,uchar?miao)?{?
?P1=0xFe;??P2=table[fen];??delay(5);//延时5毫秒??
?P1=0xFf;??P2=table[miao];??delay(5);//延时5毫秒?}??
void?delay(uint?z)?{??uint?x,y;??for(x=z;x>0;x--)???for(y=110;y>0;y--);?}

解决方案四:

while(1)
{
if(time>60)
time=0;
shi=time/10;
ge=time%10;
display(shi,ge);
}

void t0_func() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
time++;
}
}

时间: 2024-08-29 02:57:55

调试-单片机60秒计数器问题的相关文章

WPS演示制作60秒倒计时器效果的方法

WPS演示制作60秒倒计时器效果的方法   操作步骤 1.单击菜单栏"插入",在其下拉菜单中"文本框"的子菜单中选择"竖向"命令,指向在幻灯片编辑窗口中需要插入文本框的位置,点击鼠标左键,向右下拖动出一个文本框,文本框内出现一条横向闪动的细线,输入数字9.8.7.6.5.4.3.2.1.0,设置字体为微软雅黑和字号大小为40. 通过使用组合键Ctrl加鼠标左键拖动复制出3个相同的文本框,选中这4个相同的文本框,依次单击"绘图"

Jquery插件实现点击获取验证码后60秒内禁止重新获取

 这篇文章主要介绍了Jquery插件实现点击获取验证码后60秒内禁止重新获取,十分常用的功能,这里分享给大家,有需要的小伙伴参考下吧.     通过jquery.cookie.js插件可以快速实现"点击获取验证码后60秒内禁止重新获取(防刷新)"的功能 效果图: 先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:   代码如下: <!DOCTYPE html> <html> <he

js判断60秒以及倒计时示例代码

 本篇文章主要是对js判断60秒以及倒计时的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 用js判断60秒到计时,首先定义一个变量refreshTime,当触发事件的时候检查一下上一次请求成功的时间距离现在是否超过60秒,如果没有超过60秒,则弹出提示,   否则则允许继续请求,请求成功之后,把当前的时间赋值给refreshTime,具体实现方式:    代码如下: usingNamespace("Biz.AccountCenter")["CellPhon

不用等60秒看如何破除烦人广告

  众所周知,在线视频是一个烧钱的行业,这些网站为了生存和扩大盈利,纷纷在前面增加了一些广告.这本无可厚非,但看一部长不到10分钟的视频也需要等待60秒的广告时,相信谁都会郁闷的发狂. 现在有不少电脑管理软件和浏览器都内置了广告屏蔽功能,但一般只针对网页弹窗广告和挂载广告,对视频前面的广告是无效的,即使有效,有时也会导致视频无法播放. 最近有网友为我们推荐了一款广告屏蔽软件--广告助手,该软件刚刚推出,目前版本是1.0.0.1043,大小2.28MB,支持的系统为Windows XP.Windo

借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

[编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 你可能已经听说了 Jave 9 的新模块系统,也就是 Jigsaw 项目.如果你还不了解 Java 9 的新模块系统,请阅读 Mark Reinhold 的模块系统状态报告.另外还可以看看 @nipafx Nicolai Parlog 的优秀博客.Nicolai 在博客中详细介绍了 Java 9

情人节当天热吻60秒 可以在麦当劳吃到饱

本报讯(记者 党帅)一条"情人节当天热吻60秒,可以在麦当劳吃到饱啊!不限男女!"的微博近日在网上疯传,让即将到来的情人节变得越发"火辣辣".今天上午,麦当劳对此予以辟谣. 情人节未到,各商家的宣传已是"先声夺人",而这场"用热吻换吃饱"的活动尤为显眼.有http://www.aliyun.com/zixun/aggregation/3640.html">网友跃跃欲试,已经在琢磨热吻之后要几份套餐了.一部分网友

DEFCON 23|利用U盘60秒打开保险柜

本文讲的是 DEFCON 23|利用U盘60秒打开保险柜,说起存放现金,物理设备保险柜无疑是最安全的选择.在过去,窃贼要想打开保险柜得用炸药,而如今,著名的商业安保服务提供商美国布林克集团(Brinks)旗下的一款数码保险柜,却被一个USB闪存加上100行代码就给搞定了.这一惊人发现是由著名的IT安全公司Bishop Fox两位研究人员Oscar Salazar和Daniel Petro发现的,并将做为该公司的年度研究成果,在8月8日的拉斯维加斯DEFCON黑客大会上进行详细阐述. 被攻破的布林

美拍怎么拍短视频 美拍60秒视频怎么拍?

1,我们首先保证自己安装在手机中的美拍是最新版本了,否则我们可以先升级美拍然后再操作了,现在我们打开美拍,然后我们点击页面中下方的按钮开始进行拍摄. 2,在我们点击拍摄按钮之后在打开界面有一个10s的图标,我们点击它 如下图所示. 3,如果是最新版本的美拍你会看到有一个60秒视频的,但我们还需要先做任务了,任务内容会弹出提示了,条件是关注15个好友,发布3个视频和喜欢30个视频,我们需要完成这些任务. 4,最后我们完成任务后,我们同样点击拍视频然后10S按钮变成了60s视频不支持特效.

如何在60秒内“玩儿”死你的硬盘

本文讲的是 如何在60秒内"玩儿"死你的硬盘,4年前的DEFCON,有一个非常流行的演讲,讲述了紧急情况下如何在60秒内完全破坏你的硬盘.今年的DEFCON 23,这个演讲被"旧事重提",并用最新的技术手段重新诠释. 安全研究人员Zoz对多种破坏磁盘和SSD驱动器(这里指那种典型的1U服务器上的硬盘)的核心方法进行了一系列测试.他认为我们应该提出一个更有效的技术手段,在不用破坏整个数据中心,没有对人类造成伤害的风险的基础上达成我们的目的,让硬盘的目标数据变得不可读取