长汀无线电厂交流论坛

 找回密码
 注册
楼主: 摇滚铁心

我也发个2051定时器的图

  [复制链接]
 楼主| 发表于 2013-4-19 22:01:59 | 显示全部楼层
我在这里买的拆机数码管,我也不知道引脚功能,也是靠测量。我一般不去记它,用到的时候就测测。还顺便检查了好坏。
回复 支持 反对

使用道具 举报

发表于 2013-5-6 16:19:53 | 显示全部楼层
用数码管同样的习惯,就是现用先测量,种类型号太多,记不住。
回复 支持 反对

使用道具 举报

发表于 2013-5-6 21:47:55 | 显示全部楼层
86盒子的板子原来打过一些,都不知道丢哪里了。我的做的定时器现在厨房用的挺好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-8 22:13:32 | 显示全部楼层
我这只是需要用的才做,都是用手头上的东东,里面都是洞洞板其实单片机也是自由度相当大的东东,对程序精通的可以把电路设计得简单些,像我这样的初学者就只好把电路搞复杂些,程序就简单了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 21:06:27 | 显示全部楼层
这几天想装LINUX,把前年跟坛友买的旧主板套装翻出来凑个主机,没想到几个硬盘都出了问题,折腾了几个晚上。

把你的c文件发上来看看。
回复 支持 反对

使用道具 举报

发表于 2013-6-13 07:56:04 | 显示全部楼层
摇滚铁心 发表于 2013-5-8 22:13
我这只是需要用的才做,都是用手头上的东东,里面都是洞洞板其实单片机也是自由度相当大的东东,对程序 ...

程序有问题吧?
直接烧写hex文件可以正常使用,只是时间很快,我使用12兆晶振,直接复制c文件,编译后烧写的不能正常工作,按设置无法改变闪烁位置,一直是个位闪烁,按调节,是四位数一起变化,不知道哪里问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 22:10:55 | 显示全部楼层
会不会是电路有不对的地方?用12兆晶振时间当然会很快,我的程序里的参数是对应7.2兆的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 22:18:52 | 显示全部楼层
也许是编译时出了问题,你试试把我的注释删掉再编译看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 22:25:27 | 显示全部楼层
  void main()//定时模式
        {
                                    out=0;
              EA=1;
              EX0=1;//开set键中断
              ET0=1;//开定时器0做计时基准
              TMOD=0x02;
              TH0=(256-240);
              TL0=(256-240);
             定时的基准在这里设置。你试计算一下看看我这里设置的是多少,再改成使用你的12兆晶振的。我自己都忘光了,还得再翻书再重新学习过,这太麻烦了。
回复 支持 反对

使用道具 举报

发表于 2013-6-14 00:28:05 | 显示全部楼层
摇滚铁心 发表于 2013-6-13 22:25
void main()//定时模式
        {
                                    out=0;

内容现在使用8M晶振,50多秒是一分钟,快一点。暂时先用着,准备做第二个,慢慢研究。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-14 22:44:56 | 显示全部楼层
把 case 4和case 1里面的内容互换, case 2和case 3里面的内容互换,共有两处。这样就是从高位开始设置。符合使用习惯。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-25 22:45:13 | 显示全部楼层
本帖最后由 摇滚铁心 于 2013-6-25 22:48 编辑

Keil7.06版汉化

你编译时选对器件型号没?
回复 支持 反对

使用道具 举报

发表于 2013-6-25 21:25:03 | 显示全部楼层
回复 摇滚铁心 的帖子

请问你使用的keil是什么版本的,今天试了一天,别人的程序烧写后运行正常,然而我电脑keil编译后的程序工作不正常。
回复 支持 反对

使用道具 举报

发表于 2013-6-26 00:14:00 | 显示全部楼层
回复 摇滚铁心 的帖子

我的9.00汉化版,鱼版教我一晚上,都编译不成功。稀罕的很啊。
回复 支持 反对

使用道具 举报

发表于 2013-6-26 11:04:29 | 显示全部楼层
摇滚铁心 发表于 2013-6-25 22:45
Keil7.06版汉化

你编译时选对器件型号没?

找到原因了,keil没注册引起的。
现在可以用了。

还有,led的段码怎么定义引脚的,我想把数码管直接焊接在单片机引脚上,位码定义可以看到并更改,段码没看到在哪里设置的。
段码就:abcdefg冒号
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-26 20:46:21 | 显示全部楼层
本帖最后由 摇滚铁心 于 2013-6-26 20:46 编辑

p1.0~p1.7分别对应a,b,c,d,e,f,g, : 。要加电阻限流的,不能直接焊接在单片机引脚上。单片机的I/O口的吸收电流也不大,笔画全亮的话就有三四十毫安的电流,驱动数码管还是加个三极管安全些。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-26 21:00:09 | 显示全部楼层
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};开头这里就是段码定义,下面这里是显示子程序,把时和分的寄存器里的内容分成个十百千位,把对应段码定义里的数值发送到p1口。
void display()
              {
                              P1=0xff;//消隐
                              ge=0;
                              shi=1;
                              bai=1;
                              qian=1;
                              P1=table[m%10];//gewei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=0;
                              bai=1;
                              qian=1;
                              P1=table[m/10];//shiwei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=1;
                               bai=0;
                              qian=1;
                              P1=table[h%10];//baiwei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=1;
                              bai=1;
                              qian=0;
                              P1=table[h/10];//qianwei
                              delay(2);
                              md=c%2;
                              delay(2);
              }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-30 22:19:44 | 显示全部楼层
这里对不对?
    void EX0_set()interrupt 0//set键
      {
                      EX0=0;
                      delay(10);
                      if(set==0)
                              {
                                      while(!set);
                                             
                                      TR0=0;
                                      e=e++;
                                      if(e>4)
                                              {
                                                      e=0;
                                                      TR0=1;//第五次按SET键则开始定时
                                                                                                                                                out=1;
                                              }
                              }
                              EX0=1;
      }

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-30 22:30:33 | 显示全部楼层
本帖最后由 摇滚铁心 于 2013-6-30 22:31 编辑

又或者是时间在走,但秒点没闪,你以为时间没走?这里的的问题或者前面的c参数的问题?
void display()
              {
                              P1=0xff;//消隐
                              ge=0;
                              shi=1;
                              bai=1;
                              qian=1;
                              P1=table[m%10];//gewei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=0;
                              bai=1;
                              qian=1;
                              P1=table[m/10];//shiwei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=1;
                               bai=0;
                              qian=1;
                              P1=table[h%10];//baiwei
                              delay(2);
                              P1=0xff;
                              ge=1;
                              shi=1;
                              bai=1;
                              qian=0;
                              P1=table[h/10];//qianwei
                              delay(2);
                              md=c%2;
                              delay(2);
              }

这里有c参数:
   void t0_time() interrupt 1
       {
              b=b++;
              if(b>=1250)
                      {
                              b=0;
                              c=c++;
                      }
                              if(c>=120)
                                      {
                                              c=0;
                                               m=m--;
                                      }
                                      if(m==0)
                                              if(h==0)
                                                      {          //当定时时间到后关闭定时器1,显示00:00不闪烁
                                                              ET0=0;
                                                              TR0=0;
                                                              P1=table[0];
                                                              md=0;
                                                              while(1)
                                                              {
                                                                      out=0;
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=0;//全亮,继电器动作,整个程序将停在这里。
                                                              }
                                                      }
                                      if(m<0)
                                              {
                                                      m=59;
                                                      h=h--;
                                              }
      }


回复 支持 反对

使用道具 举报

发表于 2013-7-3 19:08:18 | 显示全部楼层
时间不走,设置10分钟,过了一个小时还是10分钟。
原来设置键无效,坛友告诉我改这里,改了后,设置可以了,但是时间不走。
    {
                                     while(!set);
                                     TR0=0;
                                     e=e++;【把这里改成了e=e+1按键就可以用了】
                                     if(e>4)
                        
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-4-17 00:59 , Processed in 0.455347 second(s), 15 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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