一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 17172|回复: 54

[51单片机] 想用2051做个定时/计时器,问个问题

  [复制链接]
发表于 2011-1-22 11:49 | 显示全部楼层 |阅读模式
本帖最后由 摇滚铁心 于 2011-1-22 11:52 编辑

开机时用INT0/INT1中断做定时/计时模式选择,按INT0进入计时模式,并开始计时,再按则暂停,然后再按又继续。如果按INT1则进入定时模式,开始设置时间,个位闪烁,(再按则十位闪,再按则百位闪。。。),设置好后按INT0开始定时倒数。
    定时过程中,按INT0则暂停,然后再按又继续。按INT1可以重新设置时间,个位闪烁,(再按则十位闪,再按则百位闪。。。设置好后按INT0开始新的定时。
问题是:开机时用中断来选择定时子函数还是计时子函数,进入定时子函数/计时子函数后又用相同的中断来做另外的功能,这改怎么做啊?
我写了一点就不知道怎么写了,
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,i,j;//a为模式选择标志
sbit qian =P3^7;
sbit bai =P3^5;
sbit shi =P3^4;
sbit ge =P3^0;
sbit st =P3^2;//开始/停止键
sbit set =P3^3;//设置键
sbit up =P3^0;//加
sbit md =P1^7;//秒点
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uint);
void main()
{
while (1)
{
  EA=1;
  EX1=1;
  EX0=1;
  while(1)
  {
   P1=table[0];//显示00:00
   md=0;//显示秒点
   qian=0;
   bai=0;
   shi=0;
   ge=0;
   delay(500);
   qian=1;
   bai=1;
   shi=1;
   ge=1;
   delay(500);
  }
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=74;y>0;y--);
}
void EX0_()interrupt 0//计时模式
{
a=1;
}
void EX1_()interrupt 2//定时模式
{
a=2;
}
void t0.5//0.5s
{
while(1)
  {
   EA=1;
   EX1=1;//保留开始/停止键中断
   EX1=0;//关set键中断
   ET0=1;//开定时器0做计时基准
   TMOD=0x02;
   TH0=240;
   TL0=240;
   
   
  }
}
剪贴板2051.jpg
发表于 2011-1-22 12:21 | 显示全部楼层
本帖最后由 老弹弓 于 2011-1-22 17:31 编辑

编辑一下,原因:没理解楼主的表达。
回复

使用道具 举报

发表于 2011-1-22 13:08 | 显示全部楼层
我也想 做个定时器  一直 没找到适合的~!
回复

使用道具 举报

发表于 2011-1-22 14:40 | 显示全部楼层
本帖最后由 狗狗百里游 于 2011-1-22 14:41 编辑
进入定时子函数/计时子函数后又用相同的中断来做另外的功能,这改怎么做啊?


进入INT0或者INT1触发的中断肯定能识别区分出来。至于你想得到当前是进入哪一级的菜单,请用树目录结构表示区分。
你弄一个数组来表示,比如
INT0等于复制。INT1等于删除。进入下面,
{0,1,1}等于C盘,第一个文件夹下的,第一个子文件夹,
{1,1,1}等于D盘,第一个文件夹下的,第一个子文件夹,
{2,2,1}等于E盘,第二个文件夹下的,第一个子文件夹,
{3,1,1}等于F盘,第一个文件夹下的,第一个子文件夹,
你想删除或复制或做什么功能随便你。

至于在那个文件夹或子菜单,int0,int1的功能你可以另外定义。
学编程的一定要学会数据结构的用法。
回复

使用道具 举报

 楼主| 发表于 2011-1-22 16:09 | 显示全部楼层
初学,还看不懂。
回复

使用道具 举报

发表于 2011-1-22 20:01 | 显示全部楼层
单片机的中断是很宝贵的,能用程序完成的事尽量不要用中断。
你仅按键就用完了两个外中断,不必要啊。
回复

使用道具 举报

 楼主| 发表于 2011-1-22 20:18 | 显示全部楼层
我试试看开始用扫描的方式,把中断留给后面的用。
我现在是用什么学什么,我的第一个用单片机的东东是个铅酸蓄电池充电器,2051,汇编,不会用KEIL软件,结果是手工查表编译的。这个定时/计时器将是第二个单片机作品。
回复

使用道具 举报

发表于 2011-1-22 21:26 | 显示全部楼层
没看懂原理图啊,PNP三极管的E极接地了,数码管怎么亮呀?
还有救是每个基极都接二极管有什么用呢?
望高手指点!
回复

使用道具 举报

 楼主| 发表于 2011-1-22 22:02 | 显示全部楼层
本帖最后由 摇滚铁心 于 2011-1-22 22:14 编辑

画错了,是E极接+5伏,那个电阻是接地。
原理图是有点问题,开机时4个数码管不能全亮全灭,否则继电器会来回动作
回复

使用道具 举报

发表于 2011-1-25 17:05 | 显示全部楼层
电路图就有问题,继电器的控制怎么不单独用一个IO口?
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-31 21:02 , Processed in 0.042323 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表