5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 7848|回复: 59
打印 上一主题 下一主题

每次看到各位模友酷炫DIY作品,很羡慕,也手痒从51单片机入手吧

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-14 17:59 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
请各位模友有c51的程序共享一下,先学习一下,再动手。

欢迎继续阅读楼主其他信息

60
发表于 2014-2-22 22:36 | 只看该作者
佩服楼主这种踏实学习的态度,想楼主学习
59
发表于 2014-2-19 22:56 | 只看该作者
顶顶


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

下次找机会试一下0603的封装。
57
发表于 2013-9-25 22:00 | 只看该作者
路过学习
56
发表于 2013-9-25 20:45 | 只看该作者
elvenyh 发表于 2013-9-25 13:06
串个开关就方便了,直接采用usb取电和串口数据,会比较方便

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

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



55
 楼主| 发表于 2013-9-25 13:06 | 只看该作者
skypup 发表于 2013-9-25 02:40
元器件收到了,开始焊洞洞板。

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

54
 楼主| 发表于 2013-9-25 13:05 | 只看该作者
skypup 发表于 2013-9-25 02:40
元器件收到了,开始焊洞洞板。

不错,行动派   
53
 楼主| 发表于 2013-9-25 13:05 | 只看该作者
我上次买了一些传感器等杂物,还有一些没有调
52
发表于 2013-9-25 02:40 | 只看该作者
元器件收到了,开始焊洞洞板。







51
 楼主| 发表于 2013-9-23 13:03 | 只看该作者
单片机现在好便宜啊
50
 楼主| 发表于 2013-9-23 13:02 | 只看该作者
skypup 发表于 2013-9-22 21:01
我也买了一堆,以直插为主。
仅用到0805封装的10K电阻这一种贴片。

不错啊

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

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

48
发表于 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



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


47
发表于 2013-9-22 21:40 | 只看该作者
支持
46
发表于 2013-9-22 21:01 | 只看该作者
elvenyh 发表于 2013-8-27 13:07
又买了一些电子原材料



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



45
发表于 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;
      }
     }
}


44
发表于 2013-9-17 17:09 | 只看该作者
帮顶
43
 楼主| 发表于 2013-9-17 12:57 | 只看该作者
那个仿真头是不是可以好51完美对接呢,改天琢磨一下。
42
 楼主| 发表于 2013-9-17 12:56 | 只看该作者
回楼上,非常好,没有用这个仿真环境,keil好像直接支持仿真串口输出
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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