原创 昨晚调试的一个小程序...

2007-8-24 07:07 5545 7 14 分类: MCU/ 嵌入式

今天晚上用实验板写了一个LED数码管和按键的程序...


主要功能是...利用实验板上的二个按键实现数字的加减...


通电后,数码管显示0;然后按板上的+键,数字会从0一直加到最大9999为止.


如果按-键则一直减到0为止...整个程序很简单...HE HE...


大家可以把这个程序下载到板中实验下...


昨晚搞到一点多...收获就是...对编程有了一种新的认识...以前对编程的理解是通达到功能就可以...HE HE...经过昨晚朋友的指点.本来程序写完有670字节...经过简化小了很多...最后简化到512字节...HE HE...把没必要的语句和变量可以省掉.复杂的判断用简单的方式完成...


比如我昨晚...一个判断是用三行....经朋友指点...换成二行...编译的出来的代码马上少了60字节...HE HE...


 if(!P21)
 {     
   if(Led_data)
   Led_data-=1;
      //上面二行可以代替下面三行.HE HE...
      //这样能省不少代码呀;
      //Led_data--;
      //if((Led_data==0)|(Led_data>65534))
      //Led_data=0;
    }


本来我是用下面三行的...朋友给我上面二行.我一看呀...我晕...这样也能解决问题...H EHE...


这就是菜鸟和高手的区别...还得努力...HE HE....


欢迎大家一起讨论....希望有高手提出更能精简的方案..HE HE.


#include<at89x52.h>


#define uint  unsigned int
#define uchar unsigned char



sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;


sbit P24 =P2^4;
sbit P20 =P2^0;
sbit P21 =P2^1;


uchar Led_Number[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                     0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};


uchar One,Two,Three,Four;
uint  Led_data=0;



void Delay(uint x);
void Display(void);
void Key(void);
void Led_Analyze(uint i);


void main()
{
  //uchar i;
  while(1)
  {
   Display();
   Key();


  }
}



void Key(void)
{
  uchar i;
  P24=0;
  if(!P20)
    {
    for(i=0;i<10;i++)
 Display();
 if(!P20)
 {
   Led_data++;
      if(Led_data>=9999) Led_data=9999;
 }
 }
  if(!P21)
    {
    for(i=0;i<10;i++)
 Display();
 if(!P21)
 {     
   if(Led_data)
   Led_data-=1;
      //上面二行可以代替下面三行.HE HE...
      //这样能省不少代码呀;
      //Led_data--;
      //if((Led_data==0)|(Led_data>65534))
      //Led_data=0;
    }
 }
    Led_Analyze(Led_data);
}


void Led_Analyze(uint i)
{
  One="i/1000";
  Two=(i/100)%10;
  Three=(i%100)/10;
  Four=(i%100)%10;
}


void Delay(uint x)
{
  while(--x);
}


void Display()
{
  if(One)
    {
      LED0=0;
      P0=Led_Number[One];
      Delay(100);
      LED0=1;
    }
  if(One|Two)
    {
      LED1=0;
      P0=Led_Number[Two];
      Delay(100);
      LED1=1;
    }
  if(One|Two|Three)
    {
      LED2=0;
      P0=Led_Number[Three];
      Delay(100);
      LED2=1;
    }
   
      LED3=0;
      P0=Led_Number[Four];
      Delay(100);
      LED3=1;
}
     


   

文章评论7条评论)

登录后参与讨论

用户312931 2011-2-24 13:36

老师 我以前用的号子(论坛上的)怎么用不了了?? 而且www.wang1j.com/bbs这个网站怎么进不去了??

wang1jin 2007-10-26 21:34

哈哈.我是菜鸟呀...东搞一下西搞一下...

不过现在总算有个明确的目标了.

wang1jin 2007-9-4 22:03

去小软件共享中找一找.

用户1010551 2007-9-4 21:55

请问楼主,PADS这么转WG?

用户506238 2007-8-28 13:38

不错,学习

wang1jin 2007-8-24 09:58

一起学习吧.我也很菜.只有坚持一天学一点才能进步.

用户98628 2007-8-24 08:55

谢谢老大了

    不仅为我们做了板子

还自己写教程带领我们

   真的很感激

用户1302782 2007-8-24 07:58

我还看不懂  呵呵

相关推荐阅读
wang1jin 2011-11-13 16:39
wang1jin单片机视频教程115盘下载地址!(迅雷下载)
  为了大家下载方便,我购买了一个115盘的空间,可以长期快速的为大家提供视频下载。   下载地址如下,如果下载上有什么问题,可以及时联系我,我给大家解决!       ...
wang1jin 2011-05-04 19:14
《51单片机C程序应用实例详解》随书代码下载
 最近有朋友向我反映《51单片机C程序应用实例详解》的DVD光盘中没有随书的代码,我去打开DVD光盘一看.确实是没有.可能是出版社当时没有放进去,为此我向广大的读者道歉.  当然道歉是不够的,代码也要...
wang1jin 2011-04-26 21:30
和朋友一起出的一本书《51单片机C程序应用实例详解》
本书是由sunhm、指挥和wang1jin三人合作完成。《51单片机C程序应用实例详解》在北京航空航天大学出版社的大力支持下,终于付印了,这是本人与另外两位朋友花费一年多心血完成的。  编写本书的初衷...
wang1jin 2010-11-26 15:29
请注意:PROTEL99SE视频被人刻成DVD来高价出售
最近在电子QQ群中,有一个QQ为1429474268人发了一条消息,(抱歉请允许我公开这个QQ)。他发了一条广告:实现PCB LAYOUT工程师梦想的同仁请进:http://item.taobao.c...
wang1jin 2010-06-21 13:40
wang1jin带您从零学单片机视频教程第一章下载地址
内容介绍:电子爱好者社区$Zk Q6^6L ~ _ I8h#zM0s5G(R一、单片机硬件讲解部分详细讲述了:电子爱好者社区4[7g Tt"Efff uH k.Q2aZ01、什么是单片机。电子爱好者社...
wang1jin 2010-06-17 22:34
无法下载视频教程的朋友可以购买最新刻的光盘!
最近网站上的视频教程因为服务器的问题,一直无法下载。很多网友也在问我怎么不能下载。因为我个人也没有能力去购买服务器,为大家提供这个视频的下载,为此我感觉到很抱歉。为了解决这个问题,我已经找到应对的方法...
我要评论
7
7
关闭 站长推荐上一条 /2 下一条