一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4054|回复: 11

[其他综合] 不知道我是怎么了,学什么东西只学到一半会,一半不会

[复制链接]
发表于 2012-3-12 08:56 | 显示全部楼层 |阅读模式
我认为俺学东西只学到一般会一般不会,自学的51单片机C语言编程;自己对程序的常用语句及关键字明白点了,内部硬件也明白点了;自己也能编写点很简单的程序;算是入门了吧;可就是一编程就不明白了该如何写,遇到要实现的功能,想去实现,但脑子里却一切空白,不知该怎么写才能实现所想的功能;看见论坛里比我强的学者们都能编写出来,俺就不行,编不出来;关键在于实战,可俺就是一编写就卡住了,就没思路,想不出来;程序写完编译没错;可就是没实现该功能啊!上程序了:

/*具体要求如下:
1、流水彩灯设置8个发光二极管,两个按键K1和K2;
2、上电后,8个LED灯全亮;
3、两个按键一个用于控制“流水灯”的启动和停止,
另一个用于选择“流水”的花样;
2012年3月11号"酷爱diy"晚上编写*/
#include <reg52.h>
//#include "KEY.H"
typedef unsigned char uint8 ;
typedef unsigned int  uint16;
sbit Key_stop =P3^2;
sbit Key_fe   =P3^3;
void delay(uint16 a)   //12M  1ms
{
uint16 i,j;
for(i=0;i<a;i++)
  for(j=0;j<125;j++); //j=110
}
void main()
{
uint8 m=0,n=0;
uint16 z,x,c,b;
while(1)
{
   P1=0;
   if(Key_stop==0)
   {
    delay(5);
   if(Key_stop==0)
   {
    while(Key_stop==0);
    m=m+1;
    if(m>=2)
     m=0;
   }
   if(m==1)
   {
    delay(5);
    if(Key_fe==0)
    {
     while(Key_fe==0);
     n=n+1;
     if(n>=4)
     n=0;
    }
    if(n==1)
    {
     P1=0xFE;
     //z=0x01;
     for(x=0;x<8;x++) //花样流水灯     临时的,后来在改
     {
       c=P1|0x01;
       P1=c<<1;
     }
    }
     if(n==2)
    {
      P1=0xF7;
     //z=0x01;
     for(z=8;z>0;z--) //花样流水灯  临时的,后来在改
     {
       b=P1|0x80;
       P1=b>>1;
     }
    }
     if(n==3)
    {
       P1=0;//花样流水灯  临时的,后来再改
    }
   }
   if(m==2) P1=0xFF;
   }
}
}
发表于 2012-3-12 09:42 | 显示全部楼层
本帖最后由 xrff_z 于 2012-3-12 09:43 编辑

会不会是keystop处理上的问题
“while(Key_stop==0);”这句按钮按住的话是死循环
个人觉得是启动,停止按钮分开较好,多使用子程序,程序可能更清晰
回复

使用道具 举报

 楼主| 发表于 2012-3-12 10:59 | 显示全部楼层
先这么实现了该功能,在将程序模块化;编译器通过了;可就是功能不一样,甚至不运行,无效果
回复

使用道具 举报

发表于 2012-3-12 11:10 | 显示全部楼层
你这思路不好,就这样的程序结构扩展性太差。

建议先画出程序框图,谭浩强那本书应该有一章是介绍程序框图的

不过还是建议看我以前跟你帖子后面的那个程序吧
回复

使用道具 举报

发表于 2012-3-12 11:37 | 显示全部楼层
你这思路不好,就这样的程序结构扩展性太差。

建议先画出程序框图,谭浩强那本书应该有一章是介绍程序框 ...
阳光999 发表于 2012-3-12 11:10 https://www.yleee.com.cn/images/common/back.gif



    谭浩强的那个是经典
回复

使用道具 举报

发表于 2012-3-12 12:42 | 显示全部楼层
先这么实现了该功能,在将程序模块化;编译器通过了;可就是功能不一样,甚至不运行,无效果
酷爱diy 发表于 2012-3-12 10:59 https://www.yleee.com.cn/images/common/back.gif



    模块化后,更容易找到错误,更容易调试。
就拿这个流水灯来讲,可以分为键盘扫描和流水灯两大部分,大循环就不停的扫描键盘,根据键盘扫描结果实现流水灯。调试时,两个模块可以分开调试。哪个模块有错很快就知道了。
回复

使用道具 举报

发表于 2012-3-12 12:58 | 显示全部楼层
没有数学脑袋就很困难的。
回复

使用道具 举报

发表于 2012-3-12 13:47 | 显示全部楼层
C程序设计(第4版) [平装]
~ 谭浩强 (作者)



第2章 算法——程序的灵魂
2.1 什么是算法
2.2 简单的算法举例
2.3 算法的特性
2.4 怎样表示一个算法
2.4.1 用自然语言表示算法
2.4.2 用流程图表示算法
2.4.3 三种基本结构和改进的流程图
2.4.4 用N?S流程图表示算法
2.4.5 用伪代码表示算法
2.4.6 用计算机语言表示算法
2.5 结构化程序设计方法
回复

使用道具 举报

 楼主| 发表于 2012-3-12 17:03 | 显示全部楼层
晚上将程序修该;用定时中断编写个再试试,关键还是算法,用最精简的算法替代最复杂的运算,高效的运行程序的执行
回复

使用道具 举报

发表于 2012-3-12 17:12 | 显示全部楼层
搞单片机的97%都在思考怎么去运作,写代码只有3%,谨记,单片机程序主要是思路,C语言代码不是问题~
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:14 , Processed in 0.036242 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表