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

[复制链接]
3619|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
xuyaqi 发表于 2010-3-28 07:33 | 显示全部楼层
是编译通不过,还是功能实现不了。
hyg1984 发表于 2010-3-28 13:01 | 显示全部楼层
第一次就写这样的程序?恩,不错。
飞言走笔 发表于 2010-3-28 19:20 | 显示全部楼层
不想看……:sleepy:
t86964988 发表于 2010-3-29 13:56 | 显示全部楼层
看不下去~~~
liao_fangxing 发表于 2010-3-29 16:06 | 显示全部楼层
case(0):
       disp1();---
       break;
      case(1):---------这是???没见过这么用的 孤陋寡闻咯
       disp2();
       break;
      case(2):-----------------
       disp3();
       break;
 楼主| zjy226 发表于 2010-3-30 23:50 | 显示全部楼层
7# flmyueyang
谢谢啊!我是在学习板上做的,电路固定,是扫描动态显示。
 楼主| zjy226 发表于 2010-3-30 23:51 | 显示全部楼层
7# flmyueyang
我使用中断来实现按键
 楼主| zjy226 发表于 2010-3-30 23:52 | 显示全部楼层
5# xuyaqi
谢谢啊,编译没问题,功能出不来。
 楼主| zjy226 发表于 2010-3-30 23:53 | 显示全部楼层
10# liao_fangxing
谢谢啊,我是用一个按键调整时钟状态,再根据状态调整。
liao_fangxing 发表于 2010-3-31 14:00 | 显示全部楼层
case(1):--- 偶说的是这个括号 o(∩_∩)o...哈哈
sklar 发表于 2010-3-31 14:15 | 显示全部楼层
xuyaqi 发表于 2010-3-31 17:11 | 显示全部楼层
可是你贴的程序编译通不过啊。
 楼主| zjy226 发表于 2010-3-31 23:29 | 显示全部楼层
我把那一堆if改成switch    功能实现了。这世界好奇妙!但为什么啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部