打印

求助:小弟第一次写程序,调不出来啊!请大家指教。

[复制链接]
2430|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjy226|  楼主 | 2010-3-27 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zjy226 于 2010-3-27 22:47 编辑

我写了一个可以调时间的电子钟程序,可是在学习板上调不来啊!
希望有高手指点啊!!
#include <reg51.h>      
#define SEG  P0                                           //数码管
#define SCANP P2                                          //数码管扫描信号
#define TH  (65536-50000)/256
#define TL  (65536-50000)%256
unsigned char count=0;
unsigned char m=0;
unsigned char f=0;
unsigned char s=0;
unsigned char scan=0;
unsigned char state=0;
unsigned char xs[6];
unsigned char i;
unsigned char tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
void js(void);                                          //计时
void fx(void);                                          //分析时间数据
void disp1(void);                                       //显示正常状态时间
void disp2(void);                                       //显示调分
void disp3(void);                                       //显示调时
void delay(void);
void debouncer(void);                                   //防抖
main ()
{  IE=0x87;
TCON=0x05;
TMOD=0x01;
TH0=TH;
TL0=TL;
TR0=1;
while(1)               
{  switch(state)                        //根据状态显示
    {  case(0):
       disp1();
       break;
      case(1):
       disp2();
       break;
      case(2):
       disp3();
       break;
     }
   }
}
void T0_1s(void)interrupt 1   //定时中断
{  TH0=TH;
TL0=TL;
if(++count==20)
{  count=0;
    js();
    fx();
}
}
void js(void)
{  m=m+1;
if(m==60)
{ m=0;f=f+1;}
if(f==60)
{ f=0;s=s+1;}
if(s==24)
s=0;
}
void fx(void)
{  xs[0]=m%10;
xs[1]=m/10;
xs[2]=f%10;
xs[3]=f/10;
xs[4]=s%10;
xs[5]=s/10;
}
void disp1(void)
{
scan=7;
for(i=0;i<6;i++)
{  SCANP=scan--;
    SEG=tab[xs];
    delay();
}
}
void disp2(void)
{   scan=5;
for(i=2;i<4;i++)
   {  SCANP=scan--;
      SEG=tab[xs];
      delay();
    }
}
void disp3(void)
{   scan=3;
   for(i=4;i<6;i++)
    {  SCANP=scan--;
      SEG=tab[xs];
      delay();
    }
}
void delay(void)
{  unsigned char j;
for(j=0;j<250;j++);
   
}
void states(void)interrupt 0   //调整电子钟的状态
{  debouncer();
TR0=0;
if(state==0)
{   state=1;
  
}
if(state==1)
   { state=2;
   
  
}
if(state==2)
   {state=0;
   TR0=1;}
  
}
void tiaozheng(void)interrupt 2   //根据状态调时
{
debouncer();
   if(state==0);
   if(state==1)
   { f=f+1;
    if(f==60)f=0;
   
   }
   if(state==2)
   { s=s+1;
    if(s==24)s=0;
   }
}
void debouncer(void)
{  unsigned char j;
for(j=0;j<250;j++)
      for(i=0;i<250;i++);
}
}

相关帖子

沙发
code-03| | 2010-3-27 21:52 | 只看该作者
呵呵。。我也是新手、、不过c还行、、错的太多了、、、唉、、

使用特权

评论回复
板凳
hgjinwei| | 2010-3-27 21:56 | 只看该作者
还是先学学怎么写规范代码吧,扫一眼就不想看了。

使用特权

评论回复
地板
马上行动| | 2010-3-27 22:48 | 只看该作者
怎么说类?这手术不是一般的难度,关注高手们的动作:D

使用特权

评论回复
5
xuyaqi| | 2010-3-28 07:33 | 只看该作者
是编译通不过,还是功能实现不了。

使用特权

评论回复
6
hyg1984| | 2010-3-28 13:01 | 只看该作者
第一次就写这样的程序?恩,不错。

使用特权

评论回复
7
飞言走笔| | 2010-3-28 19:20 | 只看该作者
不想看……:sleepy:

使用特权

评论回复
8
t86964988| | 2010-3-29 13:56 | 只看该作者
看不下去~~~

使用特权

评论回复
9
liao_fangxing| | 2010-3-29 16:06 | 只看该作者
case(0):
       disp1();---
       break;
      case(1):---------这是???没见过这么用的 孤陋寡闻咯
       disp2();
       break;
      case(2):-----------------
       disp3();
       break;

使用特权

评论回复
10
zjy226|  楼主 | 2010-3-30 23:50 | 只看该作者
7# flmyueyang
谢谢啊!我是在学习板上做的,电路固定,是扫描动态显示。

使用特权

评论回复
11
zjy226|  楼主 | 2010-3-30 23:51 | 只看该作者
7# flmyueyang
我使用中断来实现按键

使用特权

评论回复
12
zjy226|  楼主 | 2010-3-30 23:52 | 只看该作者
5# xuyaqi
谢谢啊,编译没问题,功能出不来。

使用特权

评论回复
13
zjy226|  楼主 | 2010-3-30 23:53 | 只看该作者
10# liao_fangxing
谢谢啊,我是用一个按键调整时钟状态,再根据状态调整。

使用特权

评论回复
14
liao_fangxing| | 2010-3-31 14:00 | 只看该作者
case(1):--- 偶说的是这个括号 o(∩_∩)o...哈哈

使用特权

评论回复
15
sklar| | 2010-3-31 14:15 | 只看该作者
;P

使用特权

评论回复
16
xuyaqi| | 2010-3-31 17:11 | 只看该作者
可是你贴的程序编译通不过啊。

使用特权

评论回复
17
zjy226|  楼主 | 2010-3-31 23:29 | 只看该作者
我把那一堆if改成switch    功能实现了。这世界好奇妙!但为什么啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝