2237|1

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

小菜鸟求助关于定时器!!!!! [复制链接]

本人毕业设计做门禁系统,有一要求:门口有人(红外探测输出高电平),LCD点亮显示欢迎词;若门口人站那超过2分钟,LCD显示请离开,并蜂鸣器报警。人离开后,LCD待机,待检测到有人,如此循环。

就这个2分钟的定时器程序怎么写?该怎样加入main()函数中?下面是本人写的程序,但功能不能实现。

sw1为红外传感器,高电平说明有人;
lcd()为欢迎词程序;
lcd1()为警告词程序;
lcd_init()为LCD初始化程序;

问题:
1.sw1==1时(有人),显示欢迎词,同时定时器开启;此时我把sw1==0(没人),这时定时器应该停止,LCD待机。但我写的这个程序,一直亮欢迎词,按    下sw1==0后不会立即初始化,直到定时器2分钟定完过后才初始化。正确的应该是定时中若sw1==0,LCD立即就能初始化的效果。


2.2分钟结束后,警告词只亮一次,然后又就跳到欢迎词。正确的应该是警告词一直显示,直到人走后(sw1==0),才待机,检测到人,显示欢迎词再如 此循环。

以下为自己写的程序(一些程序省篇幅就不贴出来了)
void Time0_init()
{
    TMOD = 0x01;//定时器T0工作在方式1,定时时间60ms=0.06s
    TH0 = 0x15;//高8位初值
    TL0 = 0xA0;//低8位初值
    EA = 1;//开总中断
    ET0 = 1;//开定时器T0中断
    TR0=1;//启动定时器
}

void main()
{         
         while(1)
   {        
     a=0;//变量a清零
            if(sw1==1)
     {
            Time0_init();
            lcd();
            if(sw1==0)
        {
            lcd_init();
         }                     
    }
        while(2000-a !=0);//等待延时2000x0.06=120s=2min
        TR0=0;//关闭定时器  
         while(sw1==1)
     {
         lcd1();
     }
   }
}

void Time0() interrupt 1//中断服务程序
{
  TH0 = 0x15;//重装定时器高8位初值
  TL0 = 0xA0;//重装定时器低8位初值
  a++;//变量a加1
}



望各路大神帮忙指点,谢谢!!!!!!!!!!!
此帖出自51单片机论坛

最新回复

设置定时器为自装载模式,溢出周期为n,每次中断给一个预定义的寄存器累加1,加到m,那么定时时长就为n*m,如果还不够,那再引入一个寄存器x,这样定时时长就成了x*m*n,这种方法可以构成任意时长的定时器。  详情 回复 发表于 2013-12-29 23:20
点赞 关注
 

回复
举报

1万

帖子

141

TA的资源

版主

沙发
 
设置定时器为自装载模式,溢出周期为n,每次中断给一个预定义的寄存器累加1,加到m,那么定时时长就为n*m,如果还不够,那再引入一个寄存器x,这样定时时长就成了x*m*n,这种方法可以构成任意时长的定时器。
此帖出自51单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表