长汀无线电厂交流论坛

标题: 我也发个2051定时器的图 [打印本页]

作者: 摇滚铁心    时间: 2013-4-13 18:11
标题: 我也发个2051定时器的图
本帖最后由 摇滚铁心 于 2013-4-13 18:13 编辑

已经正常使用了。电路图中2051的引脚看标号,软件里没有2051的库。我实际用的是1051这个块子,以前在这里买的2051里混了这么个家伙。

剪贴板2051.jpg (66.19 KB, 下载次数: 65)

剪贴板2051.jpg

1.rar

58.26 KB, 下载次数: 601


作者: ksxyp    时间: 2013-4-13 18:36
这图电子报20年前好像登过
作者: 摇滚铁心    时间: 2013-4-13 21:25
不知道,这是我自己画的,程序也是现学现编的。2051也就这么几个脚,要驱动4个数码管也只能这么接了。
作者: lxa0    时间: 2013-4-14 12:22
回复 摇滚铁心 的帖子

给你一个参考图看看
2051不用三极管也可以的





作者: 摇滚铁心    时间: 2013-4-14 22:00
我的数码管不是高亮的,我设计时取的电流差不多有10毫安,7个笔画就五六十毫安了,我怕2051吸收不了这么大的电流,就加了驱动三极管。
作者: 社建电子    时间: 2013-4-15 05:57
不错,有没有程序,也分享下,我只会烧写,其他的都不会。
作者: 摇滚铁心    时间: 2013-4-15 21:46
附件里就是,直接烧写用的.hex文件也有。原先还有个计时功能的,被砍掉了。
作者: 社建电子    时间: 2013-4-16 17:05
摇滚铁心 发表于 2013-4-13 21:25
不知道,这是我自己画的,程序也是现学现编的。2051也就这么几个脚,要驱动4个数码管也只能这么接了。

现学的就会编程序了,真厉害,我学好久了,也不会,英文太菜了。
作者: 摇滚铁心    时间: 2013-4-16 23:01
本帖最后由 摇滚铁心 于 2013-4-16 23:12 编辑

跟英文无关啊,我都是把那些当做符号,按书本上的语句要求写下来而已。这种简单的程序真不难。我看的是郭天祥的《 新概念51单片机C语言教程——入门、提高、开发、拓展》133M就不上传了。只看了需要用到的部分,其它没看。呵呵
作者: 摇滚铁心    时间: 2013-4-16 23:14
还下载了他的教学视频《[十天学会单片机和C语言编程]》5.7G
作者: 社建电子    时间: 2013-4-17 06:07
lxa0 发表于 2013-4-14 12:22
回复 摇滚铁心 的帖子

给你一个参考图看看

你的这个也不错,遥控的,有程序吗?
作者: 社建电子    时间: 2013-4-17 06:09
摇滚铁心 发表于 2013-4-16 23:01
跟英文无关啊,我都是把那些当做符号,按书本上的语句要求写下来而已。这种简单的程序真不难。我看的是郭天 ...

晶振一定要7.2的吗,坛友那个图怎么是6的,程序中没看到选择晶振的哦。
作者: 衡水家维    时间: 2013-4-18 12:58
嘿嘿,有HEX就行,不然没法仿造,再一个关键就是LED屏的脚位,咱不会改程序,自然不能定义管脚,如果不确定管脚,做出来就乱码了
作者: 摇滚铁心    时间: 2013-4-18 21:58
本帖最后由 摇滚铁心 于 2013-4-18 22:16 编辑

回复 社建电子 的帖子

东西都是在长汀这里买的,没买到6M晶振用的是7.2M。如果用6M晶振要改延时子程序的y参数。我那个延时子程序没做注释现在看不懂y参数是怎么定的了。数码管是共阳。

延时子程序:
void delay(uchar z)
        {
          uint x,y;
             for(x=z;x>0;x--)
                for(y=74;y>0;y--);
         }

作者: 摇滚铁心    时间: 2013-4-18 22:05
回复 衡水家维 的帖子

屏的abcdefg分别接p1.0~p1.6,p1.7是秒点。屏的脚位要测量才行。
作者: 摇滚铁心    时间: 2013-4-18 22:20
本帖最后由 摇滚铁心 于 2013-4-18 22:37 编辑

这个定时器现在我用来控制电动车充电器,限定充电时间。程序还有些该改进的地方,比如应该改成从最高位开始设置定时时间和最高位无效零消隐,这样才比较好。



作者: zbc84260044    时间: 2013-4-19 11:05
辛苦你啦,谢谢分享!
作者: 衡水家维    时间: 2013-4-19 19:33
摇滚铁心 发表于 2013-4-18 22:05
回复 衡水家维 的帖子

屏的abcdefg分别接p1.0~p1.6,p1.7是秒点。屏的脚位要测量才行。

哈哈,只要知道怎么接就行啊,一般用单个的8字都是从上边的中间公共端开始顺时针数的。我就是不知道怎么接,当年为了做个EEPROM复制器,那一个8字让我倒了N多次线才倒对了,真怕了
作者: 摇滚铁心    时间: 2013-4-19 22:01
我在这里买的拆机数码管,我也不知道引脚功能,也是靠测量。我一般不去记它,用到的时候就测测。还顺便检查了好坏。
作者: ksd    时间: 2013-5-6 16:19
用数码管同样的习惯,就是现用先测量,种类型号太多,记不住。
作者: 快活丞    时间: 2013-5-6 21:47
86盒子的板子原来打过一些,都不知道丢哪里了。我的做的定时器现在厨房用的挺好。
作者: 摇滚铁心    时间: 2013-5-8 22:13
我这只是需要用的才做,都是用手头上的东东,里面都是洞洞板其实单片机也是自由度相当大的东东,对程序精通的可以把电路设计得简单些,像我这样的初学者就只好把电路搞复杂些,程序就简单了,
作者: 摇滚铁心    时间: 2013-5-13 23:26
本帖最后由 摇滚铁心 于 2013-5-13 23:26 编辑

回复 社建电子 的帖子

这里有视频,我看的就是这个。《十天学会单片机和C语言编程》郭天祥老师教程

http://xidong.net/File001/File_54834.html
作者: 社建电子    时间: 2013-6-13 07:56
摇滚铁心 发表于 2013-5-8 22:13
我这只是需要用的才做,都是用手头上的东东,里面都是洞洞板其实单片机也是自由度相当大的东东,对程序 ...

程序有问题吧?
直接烧写hex文件可以正常使用,只是时间很快,我使用12兆晶振,直接复制c文件,编译后烧写的不能正常工作,按设置无法改变闪烁位置,一直是个位闪烁,按调节,是四位数一起变化,不知道哪里问题?
作者: 摇滚铁心    时间: 2013-6-13 22:10
会不会是电路有不对的地方?用12兆晶振时间当然会很快,我的程序里的参数是对应7.2兆的。
作者: 摇滚铁心    时间: 2013-6-13 22:18
也许是编译时出了问题,你试试把我的注释删掉再编译看看。
作者: 摇滚铁心    时间: 2013-6-13 22:25
  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
摇滚铁心 发表于 2013-6-13 22:25
void main()//定时模式
        {
                                    out=0;

内容现在使用8M晶振,50多秒是一分钟,快一点。暂时先用着,准备做第二个,慢慢研究。
作者: 摇滚铁心    时间: 2013-6-14 22:44
把 case 4和case 1里面的内容互换, case 2和case 3里面的内容互换,共有两处。这样就是从高位开始设置。符合使用习惯。
作者: 社建电子    时间: 2013-6-25 21:25
回复 摇滚铁心 的帖子

请问你使用的keil是什么版本的,今天试了一天,别人的程序烧写后运行正常,然而我电脑keil编译后的程序工作不正常。
作者: 摇滚铁心    时间: 2013-6-25 22:45
本帖最后由 摇滚铁心 于 2013-6-25 22:48 编辑

Keil7.06版汉化

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

作者: 社建电子    时间: 2013-6-26 00:14
回复 摇滚铁心 的帖子

我的9.00汉化版,鱼版教我一晚上,都编译不成功。稀罕的很啊。
作者: 社建电子    时间: 2013-6-26 11:04
摇滚铁心 发表于 2013-6-25 22:45
Keil7.06版汉化

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

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

还有,led的段码怎么定义引脚的,我想把数码管直接焊接在单片机引脚上,位码定义可以看到并更改,段码没看到在哪里设置的。
段码就:abcdefg冒号
作者: 摇滚铁心    时间: 2013-6-26 20:46
本帖最后由 摇滚铁心 于 2013-6-26 20:46 编辑

p1.0~p1.7分别对应a,b,c,d,e,f,g, : 。要加电阻限流的,不能直接焊接在单片机引脚上。单片机的I/O口的吸收电流也不大,笔画全亮的话就有三四十毫安的电流,驱动数码管还是加个三极管安全些。
作者: 摇滚铁心    时间: 2013-6-26 21:00
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-29 08:08
回复 摇滚铁心 的帖子

改接口可以了,现在设置好后时间不走,秒点不闪。
不知道怎么回事。
http://bbs.yleee.com.cn/forum.ph ... tra=&mobile=yes
作者: 摇滚铁心    时间: 2013-6-30 22:19
这里对不对?
    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
本帖最后由 摇滚铁心 于 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
时间不走,设置10分钟,过了一个小时还是10分钟。
原来设置键无效,坛友告诉我改这里,改了后,设置可以了,但是时间不走。
    {
                                     while(!set);
                                     TR0=0;
                                     e=e++;【把这里改成了e=e+1按键就可以用了】
                                     if(e>4)
                        
作者: 摇滚铁心    时间: 2013-7-6 21:06
这几天想装LINUX,把前年跟坛友买的旧主板套装翻出来凑个主机,没想到几个硬盘都出了问题,折腾了几个晚上。

把你的c文件发上来看看。
作者: dongyt    时间: 2013-7-8 12:13
回复 社建电子 的帖子

这条语句直接写成:e++;就可以了。
作者: 社建电子    时间: 2013-7-13 18:32
摇滚铁心 发表于 2013-7-6 21:06
这几天想装LINUX,把前年跟坛友买的旧主板套装翻出来凑个主机,没想到几个硬盘都出了问题,折腾了几个晚上。 ...

就是下载1楼你的,直接烧写hex那个可以,复制编译的就不行。
作者: 摇滚铁心    时间: 2013-7-13 22:23
也许是自动换行造成编译出错。你仔细检查看看是哪里出错了。我好像也碰到过这个问题。
作者: 社建电子    时间: 2013-7-18 12:52
回复 摇滚铁心 的帖子

编译时没有警告,也能通过。
作者: 摇滚铁心    时间: 2013-7-18 22:18
也许是某语句被接到注释后面,没有被编译。你可以试试把注释都删掉。
作者: 摇滚铁心    时间: 2013-7-19 22:36
    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-7-21 18:37
回复 摇滚铁心 的帖子

大括号有的。
作者: 摇滚铁心    时间: 2013-7-26 20:42
那我就不太清楚了。这几天在牧夫天文论坛逛逛,又勾起了买望远镜的欲望。小时候看见清澈夜空中满天繁星的感觉不知道还能不能找回一丝一毫。
作者: 社建电子    时间: 2013-7-29 07:34
回复 摇滚铁心 的帖子

现在的污染严重,还能看到天空吗?
作者: 摇滚铁心    时间: 2013-7-31 22:51
在农村还勉强,偶尔会有几天晴朗的夜空。现在近视戴着眼镜,也不知道是天空变了还是戴眼镜看不清了。小时候看见清澈夜空中满天繁星的感觉现在都找不到了。
作者: hfy687    时间: 2015-3-13 08:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: 摇滚铁心    时间: 2015-3-18 22:54
会不会是按键虚焊或者按键不良?
作者: 摇滚铁心    时间: 2015-3-18 22:56
这个东西每次使用都要设置时间,很麻烦。




欢迎光临 长汀无线电厂交流论坛 (http://www.ctwxd.com/) Powered by Discuz! X3.1