5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 每次看到各位模友酷炫DIY作品,很羡慕,也手痒从51单片机入手吧 [打印本页]

作者: elvenyh    时间: 2013-8-14 17:59
标题: 每次看到各位模友酷炫DIY作品,很羡慕,也手痒从51单片机入手吧
请各位模友有c51的程序共享一下,先学习一下,再动手。

作者: elvenyh    时间: 2013-8-14 18:00
很多网站下载都要注册,自己玩,懒得注册了

作者: elvenyh    时间: 2013-8-14 18:01
就用以前的51,感觉比较简单一些

作者: elvenyh    时间: 2013-8-14 18:03
各种各样的子程序样例,完整项目都行,最好有注视,刚刚开始学

作者: elvenyh    时间: 2013-8-14 21:39
刚才在网上下载了几个源代码,大部分都是要注册,还要积分,积分要上传代码,现在上传了还不行,要通过审核才可以

作者: elvenyh    时间: 2013-8-14 21:40
互联网还搞这么多障碍啊,还好下载两个先看着吧

作者: elvenyh    时间: 2013-8-15 20:07
先做个什么呢?肯定来个简单的,请模友帮忙出出主意啊

作者: 沈淼章    时间: 2013-8-17 15:41
顶顶

作者: mrduke    时间: 2013-8-18 09:11
内容已阅!顶顶帖子!玩的开心一切都好!(复制粘贴内容勿回复!)
去www.ndiy.com网站看看吧!里面大神很多!

作者: mrduke    时间: 2013-8-18 09:12
是.cn不是.com

作者: elvenyh    时间: 2013-8-19 13:06
mrduke 发表于 2013-8-18 09:12
是.cn不是.com

多谢


作者: 铜河    时间: 2013-8-21 10:02
先做个简单的:舵机测试仪

作者: elvenyh    时间: 2013-8-22 18:00
好的,多谢,这个不错

作者: elvenyh    时间: 2013-8-22 18:02
做了个呼吸灯,感觉单片机不太合适做这个东西,分辨率太耗资源了

作者: 小西装    时间: 2013-8-23 07:00
不错

作者: skypup    时间: 2013-8-23 18:30
听说51也可以用串口烧程序。

仿Arduino,做个适合51的开发平台吧。

作者: elvenyh    时间: 2013-8-24 10:13
skypup 发表于 2013-8-23 18:30
听说51也可以用串口烧程序。

仿Arduino,做个适合51的开发平台吧。

回楼上的魔友,已经搞起来了嘿嘿


作者: elvenyh    时间: 2013-8-25 11:42
是的,可以支持串口烧录,现在下载程序非常方便

作者: elvenyh    时间: 2013-8-25 22:29
如果有模友要学,搭建环节可以问我,我刚刚弄起来

作者: elvenyh    时间: 2013-8-25 22:30
主要是安装keil和下载工具

作者: skypup    时间: 2013-8-26 00:49
elvenyh 发表于 2013-8-25 22:30
主要是安装keil和下载工具


51 的程序自动下载是怎样实现的?

类似于 Arduino,不需要按重启键喔。



作者: 尾巴点点    时间: 2013-8-26 08:49
贴一张我焊的系统板图 (, 下载次数: 59)





作者: elvenyh    时间: 2013-8-26 12:54
尾巴点点 发表于 2013-8-26 08:49
贴一张我焊的系统板图

多谢,小系统已经搞定了,最近其它事情又给打断了


作者: elvenyh    时间: 2013-8-26 12:55
翻开以前的老板子,嘿嘿,现在还能用,省下了重新搭建焊接的麻烦

作者: elvenyh    时间: 2013-8-26 12:59
skypup 发表于 2013-8-26 00:49
51 的程序自动下载是怎样实现的?

类似于 Arduino,不需要按重启键喔。

对 Arduino不清楚,现在国产的单片机支持串口下载,就是在单片机固件中加入一个引导程序(bootloader),上电先检测是否是加载指令,如果是就跳转到接受数据并且写入到flash中,否则正常执行用户代码。现在这个引导厂家已经做好了。

作者: elvenyh    时间: 2013-8-26 12:59
skypup 发表于 2013-8-26 00:49
51 的程序自动下载是怎样实现的?

类似于 Arduino,不需要按重启键喔。

加载完成后,会自动重启运行用户代码,不用按键重启


作者: elvenyh    时间: 2013-8-26 13:06
尾巴点点 发表于 2013-8-26 08:49
贴一张我焊的系统板图

这个准备做什么的?


作者: skypup    时间: 2013-8-26 20:58
elvenyh 发表于 2013-8-26 12:59
加载完成后,会自动重启运行用户代码,不用按键重启

设想是这样的:

开发板通过USB2TTL芯片,连接到电脑的USB口。
在开发平台下面,每次需要重新刷入程序时,点击“上传”按钮,即可把程序烧录到51单片机。
这个过程,不需要任何其它操作。

我也打算来玩一玩51,正在找一款很便宜,性能又不太差的芯片,希望芯片在2元以内,最多不超过3元。


作者: elvenyh    时间: 2013-8-26 22:44
skypup 发表于 2013-8-26 20:58
设想是这样的:

开发板通过USB2TTL芯片,连接到电脑的USB口。

可以,我现在就是这样的


作者: elvenyh    时间: 2013-8-26 22:44
skypup 发表于 2013-8-26 20:58
设想是这样的:

开发板通过USB2TTL芯片,连接到电脑的USB口。

自己玩,价格不太敏感吧


作者: elvenyh    时间: 2013-8-27 13:07
又买了一些电子原材料

作者: elvenyh    时间: 2013-8-27 13:07
又买了一些电子原材料

作者: cordialz    时间: 2013-8-27 16:08
elvenyh 发表于 2013-8-27 13:07
又买了一些电子原材料

LZ加油....当年我也是从51起步的.....我的第一个作品是万年历+电子钟 好几年前的事情了 虽然现在已经很少动51了 但是确实是很好的入门芯片
现在也有玩stm32入门的 虽然功能复杂很多 但是代码相对好写一点 不怎么涉及底层配置 如果LZ的C语言功底比较强却苦手电路的话可以了解了解

51起步基础会比较扎实 不过功能确实少点 可玩性不是特别高


作者: skypup    时间: 2013-8-31 21:01
楼主加油,正好现在想做一个在上位机软件中可以自动升级STC89C单片机的设备。

一起研究研究哈。

作者: lcricq    时间: 2013-9-2 12:57
看看顶顶,为了学习学习吗。

作者: zjlmxrt3    时间: 2013-9-2 13:02
学习中

作者: elvenyh    时间: 2013-9-7 21:45
cordialz 发表于 2013-8-27 16:08
LZ加油....当年我也是从51起步的.....我的第一个作品是万年历+电子钟 好几年前的事情了 虽然现在已经很少 ...

多谢,握爪


作者: elvenyh    时间: 2013-9-7 21:47
最近花的时间少,做了个RGB的 LED显示,用PWM来控制输出光强度

作者: elvenyh    时间: 2013-9-7 21:49
核心中断部分如下,控制R_SET_VAL的大小,就能控制输出对于颜色LED的亮度,基本测试通过,嘿嘿
void timer0() interrupt 1
{  
    TR0=0 ;
        if(cnt>=0x63) cnt=0;else cnt = cnt+1;

        if (R_SET_VAL < cnt)R_Drive = 1; else R_Drive = 0;
        if (G_SET_VAL < cnt)G_Drive = 1; else G_Drive = 0;
        if (B_SET_VAL < cnt)B_Drive = 1; else B_Drive = 0;

        TR0=1 ;
}



作者: elvenyh    时间: 2013-9-7 21:51
外部控制对应的RGB_SET_VAL值,就是对应的输出LED 的强度,范围0-99,可以根据需要调整。

如果有更好的实现方式,请不吝赐教,多谢~

作者: skypup    时间: 2013-9-16 22:51
标题: 摸索出一套STC89系列51单片机的开发环境构建方法
本帖最后由 skypup 于 2013-9-21 18:06 编辑

第一步,在 Keil uVision3 软件中编写C程序。
(, 下载次数: 62)

第二步,使用STC官网的ISP软件通过串口烧程序。
(, 下载次数: 65)

第三步,在Protues里面仿真,修改程序调试时可以先用仿真。
(, 下载次数: 77)

第四步,安装 Virtual Serial Port Driver 软件虚拟串口,用串口监视器软件与单片机通讯。
(, 下载次数: 77)



作者: elvenyh    时间: 2013-9-17 12:56
回楼上,非常好,没有用这个仿真环境,keil好像直接支持仿真串口输出

作者: elvenyh    时间: 2013-9-17 12:57
那个仿真头是不是可以好51完美对接呢,改天琢磨一下。

作者: 薛福正    时间: 2013-9-17 17:09
帮顶

作者: skypup    时间: 2013-9-18 18:01
本帖最后由 skypup 于 2013-9-23 17:03 编辑

今天研究了一下STC在ISP烧程序时,自动冷启动的逻辑。
用USB转TTL,加上一个电阻和一个8050三极管做的电子开关。成功实现了自动冷启动功能。

原理:
jian听上位机串口发来的数据,波特率 2400,如果连续收到若干个(20个) 0x7F 字符,则电子开关给低电平,延时几百ms,再拉高。

STC89C52 源代码:
#include "reg51.h"
#include "stdio.h"
#include "intrins.h"
#define FOSC 16000000L  
#define BAUD 2400  
/*Define UART parity mode*/
#define NONE_PARITY     0   //None parity
#define ODD_PARITY      1   //Odd parity
#define EVEN_PARITY     2   //Even parity
#define MARK_PARITY     3   //Mark parity
#define SPACE_PARITY    4   //Space parity
#define PARITYBIT NONE_PARITY
sfr T2CON  = 0xC8;          //timer2 control register
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;
sbit PIN1 = P1^0;
sbit PIN2 = P1^1;
sbit PIN3 = P1^2;
unsigned int nCount7F = 0;
unsigned char lIsRx = 0;
unsigned char nRxCount = 0;
bit busy;
void Sleep(unsigned int nLoop)
{
  unsigned int i;
  for (; nLoop > 0; nLoop--) for (i = 0; i < 10000; i++);
}
void SetUSARTReceiverEnabled()
{
  ES = 1;
}
void SetUSARTReceiverDisabled()
{
  ES = 0;
}
void UARTInit()
{
#if (PARITYBIT == NONE_PARITY)
     SCON = 0x50;            //8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
     SCON = 0xda;            //9-bit variable UART, parity bit initial to 1
#elif (PARITYBIT == SPACE_PARITY)
     SCON = 0xd2;            //9-bit variable UART, parity bit initial to 0
#endif
     TL2 = RCAP2L = -(FOSC/32/BAUD); //Set auto-reload vaule
     TH2 = RCAP2H = (-(FOSC/32/BAUD)) >> 8;
     T2CON = 0x34;           //Timer2 start run
     ES = 1;                 //Enable UART interrupt
     EA = 1;                 //Open master interrupt switch
}
void Uart_Isr() interrupt 4
{
     char cFlag;
    if (RI)
     {
         RI = 0;
         cFlag = SBUF;
         if (cFlag == 0x7F) {
             nCount7F++;
             if (nCount7F > 100) nCount7F = 100;
         } else nCount7F = 0;
         lIsRx = 1;
     }
   
    if (TI)
     {
         TI = 0;
         busy = 0;           
    }
}
void main() {
   char nLoop;
   UARTInit();
     nCount7F = 0;
   PIN1 = 0;
     PIN3 = 1;
     for (nLoop = 0; nLoop < 4; nLoop++) {
         PIN2 = 1;
         Sleep(1);
         PIN2 = 0;
         Sleep(1);
     }
   
     for (;;) {
      if (nCount7F > 30) {
          PIN1 = 1;
          PIN2 = 1;
          PIN3 = 1;
          SetUSARTReceiverDisabled();
          Sleep(20);
          SetUSARTReceiverEnabled();
          PIN1 = 0;
          PIN2 = 0;
          nCount7F = 0;
      }
      nRxCount++;
      if (nRxCount > 200) {
          nRxCount = 0;
          lIsRx = 0;
      }
      if (nRxCount > 100 && lIsRx) {
          PIN3 = 0;
      } else {
          PIN3 = 1;
      }
     }
}



作者: skypup    时间: 2013-9-22 21:01
elvenyh 发表于 2013-8-27 13:07
又买了一些电子原材料

(, 下载次数: 53)

我也买了一堆,以直插为主。
仅用到0805封装的10K电阻这一种贴片。




作者: 薛福正    时间: 2013-9-22 21:40
支持

作者: skypup    时间: 2013-9-22 23:14
本帖最后由 skypup 于 2013-9-22 23:22 编辑

为了节省成本,选用 5CM*7CM 的洞洞板来制作。洞洞板单价 0.25元,如果印制PCB板,数量不多时,每个板子的成本远超过1元。

估算了一下,洞洞板+芯片+元件器,一共 3.19元。
其中:3条排针 0.48 元、30个0805封装的10K电阻 0.3元,这些仅在全部端口都用上的情况下才需要,对于简单的应用不需要花费 0.78元这么多的。成本可控制在 3元以内。

元件
单价
数量
金额
5*7CM洞洞板
0.25
1
0.25
STC89C52 直插
1.50
1
1.50
LED
0.07
1
0.07
1K电阻 直插
0.02
1
0.02
1*40P排针
0.16
3
0.48
104电容 直插
0.03
1
0.03
10K电阻 直插
0.02
1
0.02
10uF电容 直插
0.09
2
0.18
47pF电容 直插
0.05
2
0.10
10K电阻 贴片0805封装
0.01
30
0.30
16M无源晶体 直插
0.24
1
0.24
合计
3.19

(, 下载次数: 64)

注意,这个板子不兼容高压舵机(7.4V或12V高压舵机不可以直接插在板子上使用)。通常情况下,它需要5V电源(可以从电调的BEC取电或者4.8V镍氢电池)。



作者: elvenyh    时间: 2013-9-23 13:01
skypup 发表于 2013-9-22 23:14
为了节省成本,选用 5CM*7CM 的洞洞板来制作。洞洞板单价 0.25元,如果印制PCB板,数量不多时,每个板子的成 ...

这个是准备做一个舵机控制器啊?


作者: elvenyh    时间: 2013-9-23 13:02
skypup 发表于 2013-9-22 21:01
我也买了一堆,以直插为主。
仅用到0805封装的10K电阻这一种贴片。

不错啊


作者: elvenyh    时间: 2013-9-23 13:03
单片机现在好便宜啊

作者: skypup    时间: 2013-9-25 02:40
元器件收到了,开始焊洞洞板。

(, 下载次数: 52)

(, 下载次数: 91)

(, 下载次数: 61)


作者: elvenyh    时间: 2013-9-25 13:05
我上次买了一些传感器等杂物,还有一些没有调

作者: elvenyh    时间: 2013-9-25 13:05
skypup 发表于 2013-9-25 02:40
元器件收到了,开始焊洞洞板。

不错,行动派   

作者: elvenyh    时间: 2013-9-25 13:06
skypup 发表于 2013-9-25 02:40
元器件收到了,开始焊洞洞板。

串个开关就方便了,直接采用usb取电和串口数据,会比较方便


作者: skypup    时间: 2013-9-25 20:45
elvenyh 发表于 2013-9-25 13:06
串个开关就方便了,直接采用usb取电和串口数据,会比较方便

我用其中一片 STC89C52 与 8050三极管,搭了一个自动冷启动的电路。
与USB转TTL配合,烧写程序时,不需要手工冷启动的。

原理:
RX接收上位机串口发来的数据,波特率 2400,如果连续收到若干个(20个) 0x7F 字符,则电子开关给低电平,延时几百ms,再拉高。




作者: myxiaoqy    时间: 2013-9-25 22:00
路过学习

作者: skypup    时间: 2013-9-26 06:47
修正一下贴片电阻的封装,之前我买的都是0805封装的,结果发现实际上它太大了,无法嵌在信号与电源正2个管脚之间。

下次找机会试一下0603的封装。

作者: 撞倒牛    时间: 2014-2-19 22:56
顶顶



作者: 冰の水若寒    时间: 2014-2-22 22:36
佩服楼主这种踏实学习的态度,想楼主学习





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com./) Powered by Discuz! X3.3