一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: 酷爱diy

[其他综合] 亲身感受,学什么东西,只要与技术有关,没人教永远都自学不会

 火... [复制链接]
 楼主| 发表于 2012-3-2 22:27 | 显示全部楼层
最小系统俺有啊,用的是STC89C52RC,数码管,继电器,液晶等外围设备俺都有,也可以自制,也可以参考网上的图纸;可是不会用程序的语句组合成程序的算法;光知道C语言的关键字与运算+语句还是不行,关键是得会搭建算法,俺不会也没头绪,不知怎么办
回复

使用道具 举报

 楼主| 发表于 2012-3-2 23:44 | 显示全部楼层
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uint8;
typedef unsigned int  uint16;

void delay(uint16 c)
{
        uint16 a,b;
        for(a=0;a<c;a++)
                for(b=110;b>0;b--);
}

void main()
{
        uint8 x,z;
        z=0xfe;
        while(1)
        {
               
                for(x=0;x<7;x++)
                {
                        delay(50);
                        P1=z-- ;
                }
                       
        }
}
各位师傅们看看俺现场编的程序,通过调试谁然没有实现流水灯的效果,但通过调试怪现象;很有趣,但这个现象的却很有趣,请看看是什么原因还是算法不对还是语句错误照成的
回复

使用道具 举报

发表于 2012-3-3 14:45 | 显示全部楼层
回复 42# 酷爱diy


    网上找的另外一个流水灯程序
你对比一下有什么差别

#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#define ulong unsigned long
#include <reg52.h>     //包括一个52标准内核的头文件
sbit P10 = P1^0; //头文件中没有定义的IO就要自己来定义了
sbit P11 = P1^1;
sbit P12 = P1^2;  
sbit P13 = P1^3;
bit ldelay=0;  //长定时溢出标记,预置是0
uchar speed=10;  //设置一个变量保存跑马灯的移动速度
char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
//自动变速的跑马灯试验
void main(void) // 主程序
{
uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入P1的值
uchar ledi;  //用来指示显示顺序
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1;   //启动定时器
ET2=1;    //打开定时器2中断
EA=1;     //打开总中断
  
while(1)  //主程序循环
{  
  if(ldelay)  //发现有时间溢出标记,进入处理
  {
   ldelay=0;  //清除标记
   P1=ledp[ledi]; //读出一个值送到P1口
   ledi++;  //指向下一个
   if(ledi==4)
   {
    ledi=0; //到了最后一个灯就换到第一个
    speed--;
    if(speed==0)speed=10;//每循环显示一次,就调快一次溢出速度
   }
  }
}
}
//定时器2中断
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==speed) //比较一个变化的数值,以实现变化的时间溢出
{
  t=0;
  ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理
}
}
回复

使用道具 举报

 楼主| 发表于 2012-3-3 23:45 | 显示全部楼层
谢谢;看了一下用了定时,中断,数组;看了感觉编的很罗嗦,不怎么精简啊;我上面的程序是按照自己的想法写的;可就是实现的功能却与自己想的不一样啊;没了思路了,脑子里没有了如何用最精简的算法,编出最高效率的程序,这是我的目标,可俺不会什么算法啊,该怎么办呢;虽然每晚有时间练练程序,可是没有目标的项目很让人头晕,算法还是最重要的以及如何看懂时序图,如何按照时序图写程序,如何看懂与懂得会对单片机的各功能以及外围的设备进行程序的编写与控制;都是我老大难的问题把在眼前,一直都无师指导啊,师傅们拉小弟一把吧
回复

使用道具 举报

发表于 2012-3-4 01:37 | 显示全部楼层
本帖最后由 gaojxp 于 2012-3-4 01:43 编辑

回复 42# 酷爱diy

(1)
z=0xfe;
执行z--  
得到:0xfd、0xfc、0xfb.....  
P1显示的就不是流水了。

(2)
P1= z-- ;
应该改一下
P1 = ~(1 << x);


(本人菜鸟C51不会,AVR是这么写)
回复

使用道具 举报

 楼主| 发表于 2012-3-4 08:32 | 显示全部楼层
AVR    BIT (1<<x),位操作 ;我想用算法实现想要的各功能,算法是怎么组合成的
回复

使用道具 举报

发表于 2012-3-4 10:59 | 显示全部楼层
回复 46# 酷爱diy


   明白了  你没看过关于编程的书  所以那些语法你都不懂  先找一本看看吧
回复

使用道具 举报

发表于 2012-3-4 12:05 | 显示全部楼层
学习单片机要看兴趣和灵性,不管你原来学的是什么专业.只要有学习单片机的兴趣就会有持之以恒的耐力,加之手中的硬件设备再由浅入深系统学习理论,积极动手,不耻下问,参照别人程序要点多提出几个为什么,多和高手交流和请教,久而久之你就会发现问的的问题少了回答别人的问题多了了许多,那时你就感到自己得到升华,不觉不由的已经加入到高手行列里去了!
回复

使用道具 举报

 楼主| 发表于 2012-3-4 23:19 | 显示全部楼层
有道理,语法+算法我确实看得很少,也不怎么懂,也有时看不懂,领悟不出其中的重点意思
回复

使用道具 举报

发表于 2012-3-5 09:54 | 显示全部楼层
先找本数学吧
P1=z-- ;
z=254-1..................一直到254-7,之有高位的几个灯亮。
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-8-18 16:26 , Processed in 0.032018 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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