7714|14

87

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C语言单片机 时钟程序 [复制链接]

学校要求做一个24小时的时钟 格式为 XX:XX (小时:分钟) 程序已经完成 但是显示的时候应该熄灭的灯管确实微微亮着的 比如应该显示6的时候 却有些像8 老师说是学校的设备达不到要求 如果使用两个中断就可以解决

我不知道该如何弄 还请各位大大赐教 多谢

code:


  1. #include
  2. #include
  3. #include "d:\Keil\Lcd.h"
  4. #include "d:\Keil\serial.h"
  5. #include "d:\Keil\keyboard.h"

  6. #define MinutesButton      KEY7
  7. #define ToggleNameLed         0x01
  8. #define HoursButton            KEY6
  9. #define PowerButton           KEY0



  10. int i=0,dot=0,dotm=0;
  11. int disp=1,j=0;
  12. int count=0;
  13. int seg[10] = {0xAF,0xA0,0xCD,0xE9,0xE2,0x6B,0x6F,0xA1,0xEF,0xEB};
  14. int digit[4]={4,2,3,1};


  15. void inittimer(void)
  16. {
  17.         EAL=0;
  18.         TMOD=0X01;
  19.         TR0=1;
  20.         ET0=1;
  21.         TL0=0x17;
  22.         TH0=0xFC;
  23.         EAL=1;


  24. }



  25. void task1 (void) interrupt 1
  26. {

  27.         TL0=0X17;
  28.         TH0=0XFC;
  29.         count++;
  30.         dotm++;
  31. }
  32.               




  33. void main(void)

  34. {


  35.         int sec=0;
  36.         int min=0;
  37.         int Tmin=0;
  38.         int hour=0;
  39.         int Thour=0;
  40.         int minutes=0;  






  41.   LcdInit();
  42.   KeyboardInit();
  43.   port_init();
  44.   inittimer();
  45.         digit[0] = 0;
  46.         digit[2] = 0;
  47.         digit[1] = 0;
  48.         digit[3] = 0;


  49.   LcdSetXY(1,0);
  50.   LcdString("power is on");


  51. while(1){

  52.         i++;
  53.         if (i > 3)
  54.                 {
  55.                         i=0;
  56.                 }
  57.        
  58.         disp*=2;

  59.         if (dotm>500)
  60.         {
  61.                 dot=dot^0x10;
  62.                 dotm=0;
  63.         }
  64.        
  65.         if (disp >8)
  66.                
  67.         {
  68.            disp =1;
  69.         }
  70.        

  71.          P5=disp|0xC0;
  72.                    
  73.         P1=seg[digit[i]] | dot;
  74.        
  75.   if(count>=1000)
  76.    {
  77.            sec++;
  78.         count=0;
  79.         }
  80.        
  81.         digit[0] = min;
  82.         digit[2] = Tmin;
  83.         digit[1] = hour;
  84.         digit[3] = Thour;         
  85.        
  86. if(!(P5&0x40))
  87. {
  88.         
  89.    
  90.         if (count>30)
  91.         {
  92.                 if (min<9)
  93.        
  94.                 {
  95.                         min++;
  96.                 }
  97.         else if (min==9)
  98.        
  99.                 {
  100.                         Tmin++;
  101.                         min=0;
  102.                 }
  103.        
  104.                 count=0;
  105.         }
  106.        
  107. }
  108. if(!(P5&0x80))
  109. {
  110.         
  111.         if (count>30)
  112.         {
  113.            if (min>0)
  114.                 {
  115.                         min--;
  116.                 }
  117.         else if ((min==0)&&(Tmin>0))
  118.                
  119.                 {
  120.                         Tmin--;
  121.                         min=9;
  122.                 }
  123.         else if ((min==0)&&(Tmin==0)&&(hour>0))
  124.         {
  125.                       Tmin=5;
  126.                 min=9;
  127.                 hour--;
  128.         }
  129.         else if ((min==0)&&(Tmin==0)&&(hour==0)&&(Thour>0))
  130.         {
  131.                               min=9;
  132.                         Tmin=5;
  133.                         hour=9;
  134.                         Thour--;
  135.         }
  136.         else if ((min==0)&&(Tmin==0)&&(hour==0)&&(Thour==0))
  137.         {
  138.                 min=9;
  139.                 Tmin=5;
  140.                 hour=3;
  141.                 Thour=2;
  142.         }

  143.         count=0;
  144.        
  145.         }
  146.          

  147. }

  148. if(sec==59)
  149. {
  150.                         if (min<9)
  151.                         {
  152.                                 min++;
  153.                         }
  154.                         else if (min==9)
  155.                         {
  156.                                 Tmin++;
  157.                                 min=0;
  158.                         }         
  159.         sec=0;
  160. }

  161. else if((Tmin==6)&&(min==0))         
  162. {   
  163.         if ((Thour<2)&&(hour<9))
  164.         {
  165.                 hour++;
  166.         }
  167.         else if ((Thour<2)&&(hour==9))
  168.         {
  169.             Thour++;hour=0;
  170.         }
  171.         else if ((Thour==2)&&(hour<3))
  172.         {
  173.                 hour++;
  174.         }
  175.         else if ((Thour==2)&&(hour==3))
  176.         {
  177.                 Thour=0;
  178.                 hour=0;
  179.         }  
  180.     Tmin=0;
  181. }

  182. }
  183.                   
  184.                         



  185.                      


  186.         
  187. }



  188.   






复制代码
此帖出自编程基础论坛

最新回复

if ( !(x % 3)) {         P5=disp|0xC0;                                P1=getal[digit[i]] | dot;         }复制代码 谢谢楼上各位 修改了这句以后 之前的问题没有了 显示起来有些不连贯 老师表示这个已经可以了 但说还不是他期望的方式 准备做个 display 在 interrupt 里面的 等好了会贴上来的 再次感谢各位了  详情 回复 发表于 2010-1-8 18:06
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该是LED数码管的刷新与显示的时间控制有问题;
导致熄灭的时间不够;


我晚上给你详细的源代码吧,QQ:604914729,到时如还有问题,QQ聊。
此帖出自编程基础论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个是刷新频率的事
此帖出自编程基础论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
数码管扫描频率小一点就好了   试试
此帖出自编程基础论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
为什么不能添加回复 再试一下

多谢2,3楼的大大 一会拿到板子 我再试下

1楼的大大 等你有空还要麻烦你了  谢谢
此帖出自编程基础论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
MARK
此帖出自编程基础论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
学习
此帖出自编程基础论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
学习
此帖出自编程基础论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
    P5=disp|0xC0;
               
        P1=seg[digit] | dot;
改为
    P1=0;
    P5=disp|0xC0;
               
        P1=seg[digit] | dot;
试一试
此帖出自编程基础论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
学习!
此帖出自编程基础论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主你可以改变下位码的扫描频率看看
此帖出自编程基础论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
板子有锁存器吗?有可能是板子的问题,
此帖出自编程基础论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

13
 
不好意思,刚才没看代码!!

你将频率改小一点应该就好了!
此帖出自编程基础论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 
显示频率的问题吧  动态显示就是这样
此帖出自编程基础论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
  1. if ( !(x % 3)) {
  2.         P5=disp|0xC0;
  3.                       
  4.         P1=getal[digit[i]] | dot;
  5.         }
复制代码


谢谢楼上各位 修改了这句以后 之前的问题没有了 显示起来有些不连贯

老师表示这个已经可以了 但说还不是他期望的方式

准备做个 display 在 interrupt 里面的

等好了会贴上来的

再次感谢各位了
此帖出自编程基础论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表