标题: 单片机做一个时钟(2位7段数码管还是不会用),有些头疼 [打印本页]

作者: 豆豆12587    时间: 2019-1-8 22:49
标题: 单片机做一个时钟(2位7段数码管还是不会用),有些头疼
//虽然能一秒显示一个数,但是2位7段数码管还是不会用。本来是想实现24秒,晚上18点到第二天6点路灯打开,用24秒代替24时显示出来。还有单片机内部的AD转换,,能够用LCD显示出光照强度。(本来应该是用LCD全部一起显示出来的)感觉实在不会


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit duan=P2^6;
  5. sbit wei=P2^7;
  6. uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};
  7.      //显示0,1,2,3,4,5,6,7,8,9 共阴取反
  8. uchar num;
  9. void delay(uint);
  10. void delay(uint xms)
  11. {
  12. uint i,j;
  13. for(i=xms;i>0;i--)
  14.    for(j=110;j>0;j--);
  15. }
  16. void main()
  17. {
  18. while(1)
  19. {
  20. for(num=0;num<24;num++)
  21. {
  22. int a,b;
  23. a=num%10;
  24. b=num/10;
  25. duan=1;
  26. P0=~table[b];
  27. delay(500);
  28. duan=0;
  29. P0=~0xff;
  30. wei=1;
  31. P0=~table[a];
  32. delay(500);
  33. wei=0;
  34.   if(num>6&&num<18)
  35. {P1=0xff;}
  36. else
  37. {P1=0x00;}
  38. }

  39. }
  40.   
  41.   }
复制代码

smgm.png (134.19 KB, 下载次数: 17)

smgm.png

作者: 豆豆12587    时间: 2019-1-8 22:50
请教各位
作者: yzwzfyz    时间: 2019-1-9 08:35
不知道你学了多久,如果很容易的话,单片机这一行就不值钱了。一样样的弄懂,功到自然成。
作者: weidoit    时间: 2019-1-9 09:07
AT89C51 内部没有ADC,这样取光照度的电路不可行,换个思路吧。
作者: 豆豆12587    时间: 2019-1-9 13:09
可以用ADC0804转换吧
作者: 豆豆12587    时间: 2019-1-9 13:10
正在尝试用0804转换和1602 显示数据
作者: blackstar    时间: 2019-1-9 15:25
可以用DS1302时钟,走时精确,简单好用。显示用数码管、液晶都可以。看你手头上有啥
作者: 豆豆12587    时间: 2019-1-10 13:01
blackstar 发表于 2019-1-9 15:25
可以用DS1302时钟,走时精确,简单好用。显示用数码管、液晶都可以。看你手头上有啥

有1602
作者: donerlin    时间: 2019-1-10 16:27
一、我看了你的仿真电路,如果你只能点亮一位数码管,希望两位一齐点亮的话,可以用轮留点亮的方法。例如第10ms点亮位1数码管,第20ms点亮位2数码管。

二、若单片机没有AD转换器的话,可以随便买个AD转换模块接在单片机即可。例如AD5686芯片。

三、我用单片机十年以上了,感觉单片机只是让你慢慢学习模电和数电的起点,慢慢学,总会学会的。
作者: 豆豆12587    时间: 2019-1-12 12:04
donerlin 发表于 2019-1-10 16:27
一、我看了你的仿真电路,如果你只能点亮一位数码管,希望两位一齐点亮的话,可以用轮留点亮的方法。例如第 ...

恩恩,谢谢,单片机的程序还是要慢慢写才好,一步一步来




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1