小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 12930|回复: 7

谁有可使用论坛上位机程序控制的最小51单片机固件

[复制链接]
发表于 2012-9-2 08:50:28 | 显示全部楼层 |阅读模式
如题,最近看到一款超小的51单片机系统板,想利用他做个超小的驱动板,
希望能借用论坛上安卓手机的上位机程序,谁有现成的下位机固件?
回复

使用道具 举报

发表于 2012-9-2 09:52:59 | 显示全部楼层
坛里有,好好找找
回复 支持 反对

使用道具 举报

发表于 2012-9-2 13:26:42 | 显示全部楼层
嗯  上次也看到了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-4 22:22:10 | 显示全部楼层
宏晶 STC11F32XE-35I-PDIP40 这个单片机如果直接刷论坛的驱动板固件不知道是否需要能用。
回复 支持 反对

使用道具 举报

发表于 2012-9-26 15:26:18 | 显示全部楼层
本帖最后由 sunxiaofei 于 2012-9-26 15:36 编辑

我的双字符版可以控制但要把控制A1变成4131即A的字符十六进制编码是41,1的字符十六进制编码是31   我的是四个减速电机,两个驱动轮子(链条四驱)两个云台,没舵机。下位机里有舵机控制我没用过。
电机由八个继电器控制  下位机(51单片机)源码:

/*预处理命令*/
#include <reg52.h>           //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
#define motor P1        /*规定电机为p1端口组
/***L298N接法
1INA > P10
1INB > P11
2INA > P12
2INB > P13***/
uchar serVal[2];    /*无符号型字符数据serVal[2]        */
uchar hightVotage1, lowVotage1, angleValue1;
uchar hightVotage2, lowVotage2, angleValue2;
uchar hightVotage3, lowVotage3, angleValue3;
uchar hightVotage4, lowVotage4, angleValue4;
sbit kai1=P2^0;
sbit kai2=P2^1;
sbit kai3=P2^2;
sbit kai4=P2^3;
sbit steeringGearSignal=P0^0;
sbit steeringGearSigna2=P0^1;
sbit steeringGearSigna3=P0^2;
sbit steeringGearSigna4=P0^3;
bit PWMCTL1=0;
bit PWMCTL2=0;
bit PWMCTL3=0;
bit PWMCTL4=0;

/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init()
{
    motor=0xff;
    TMOD=0x20;           //用定时器设置串口波特率
    TH1=0xfd;           //256-11059200/(32*12*9600)=253 (FD)
    TL1=0xfd;
    TR1=1;
    REN=1;          //串口初始化
    SM0=0;
    SM1=1;
    EA=1;           //开启总中断
    ES=1;  
}
/********************************************************************
* 名称 : Timer0Init()
* 功能 : 舵机PWM中断初始化
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Timer0Init()
{
//0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
//0.1ms初始值 FFA3, (12n/11059200=0.1/1000, n=92, X=65535-92=65443 > FFA3)   
    steeringGearSignal=0;
    steeringGearSigna2=0;
    steeringGearSigna3=0;
    steeringGearSigna4=0;
    angleValue1=15;    //初始90度
    angleValue2=15;
    angleValue3=15;
    angleValue4=15;
    TMOD |= 0x01;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响        
    TH0=0xFF;          //给定初值,0.1ms中断
    TL0=0xA3;
    EA=1;            //总中断打开
    ET0=1;           //定时器中断打开
    TR0=1;           //定时器开关打开                                   
}

/********************************************************************
* 名称 : SteeringGear()
* 功能 : 舵机PWM中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void SteeringGear() interrupt 1
{
    TH0=0xFF;    //重置计时器初始值
    TL0=0xA3;

    //舵机信号1
     if (PWMCTL1)    //正在输出高电平
    {
        if(++hightVotage1>=angleValue1){//开始输出低电平
            PWMCTL1=!PWMCTL1;
            lowVotage1=0;
            steeringGearSignal=0;
        }else
            steeringGearSignal=1;
    }else{            //正在输出低电平
        if(++lowVotage1>=200){//开始输出高电平
            PWMCTL1=!PWMCTL1;
            hightVotage1=0;
            steeringGearSignal=1;
        }else
            steeringGearSignal=0;
    }

    //舵机信号2
     if (PWMCTL2)    //正在输出高电平
    {
        if(++hightVotage2>=angleValue2){//开始输出低电平
            PWMCTL2=!PWMCTL2;
            lowVotage2=0;
            steeringGearSigna2=0;
        }else
            steeringGearSigna2=1;
    }else{            //正在输出低电平
        if(++lowVotage2>=200){//开始输出高电平
            PWMCTL2=!PWMCTL2;
            hightVotage2=0;
            steeringGearSigna2=1;
        }else
            steeringGearSigna2=0;
    }
   
    //舵机信号3
     if (PWMCTL3)    //正在输出高电平
    {
        if(++hightVotage3>=angleValue3){//开始输出低电平
            PWMCTL3=!PWMCTL3;
            lowVotage3=0;
            steeringGearSigna3=0;
        }else
            steeringGearSigna3=1;
    }else{            //正在输出低电平
        if(++lowVotage3>=200){//开始输出高电平
            PWMCTL3=!PWMCTL3;
            hightVotage3=0;
            steeringGearSigna3=1;
        }else
            steeringGearSigna3=0;
    }
   
    //舵机信号4
     if (PWMCTL4)    //正在输出高电平
    {
        if(++hightVotage4>=angleValue4){//开始输出低电平
            PWMCTL4=!PWMCTL4;
            lowVotage4=0;
            steeringGearSigna4=0;
        }else
            steeringGearSigna4=1;
    }else{            //正在输出低电平
        if(++lowVotage4>=200){//开始输出高电平
            PWMCTL4=!PWMCTL4;
            hightVotage4=0;
            steeringGearSigna4=1;
        }else
            steeringGearSigna4=0;
    }
}

/********************************************************************
* 名称 :SteeringGear1Up()
* 功能 : 舵机1向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear1Up()
{
    if(angleValue1>5)
        angleValue1--;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear1Down()
* 功能 : 舵机1向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear1Down()
{
    if(angleValue1<25)
        angleValue1++;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear2Up()
* 功能 : 舵机2向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear2Up()
{
    if(angleValue2>5)
        angleValue2--;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear2Down()
* 功能 : 舵机2向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear2Down()
{
    if(angleValue2<25)
        angleValue2++;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear3Up()
* 功能 : 舵机3向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear3Up()
{
    if(angleValue3>5)
        angleValue3--;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear3Down()
* 功能 : 舵机3向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear3Down()
{
    if(angleValue3<25)
        angleValue3++;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear4Up()
* 功能 : 舵机4向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear4Up()
{
    if(angleValue4>5)
        angleValue4--;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 :SteeringGear4Down()
* 功能 : 舵机4向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteeringGear4Down()
{
    if(angleValue4<25)
        angleValue4++;
    serVal[0]='z'; //清除缓存,不然会一下子调到尽头
}

/********************************************************************
* 名称 : ser()
* 功能 : 串口中断接收数据
* 输入 : 无
* 输出 : 无
***********************************************************************/
void ser() interrupt 4
{
    RI=0;
    serVal[0]=serVal[1];
    serVal[1]=SBUF;
}

/*********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
*********************************************************************************/
void main()
{
P1=0x00
    Com_Init();//串口初始化
    Timer0Init();//舵机初始化
   
    while(1)
    {
     if(serVal[0]=='A'){
        switch(serVal[1])
        {
            case '0': motor=0x00; break; //停止
            case '1': motor=0x0a; break; //前进 00001010
            case '2': motor=0x05; break; //左转 00000101
            case '3': motor=0x09; break; //后退 00001001
            case '4': motor=0x06; break; //右转 00000110
case '5': motor=0x10; break; // 向上 00010000
            case '6': motor=0x20; break; //向下 00100000
            case '7': motor=0x40; break; //向左 01000000
            case '8': motor=0x80; break; //向右 100000000



            default:break;
        }
     }else if(serVal[0]=='B'){
        switch(serVal[1])
        {
            case '1': SteeringGear1Up(); break;
            case '2': SteeringGear1Down(); break;
            case '3': SteeringGear2Up(); break;
            case '4': SteeringGear2Down(); break;
            case '5': SteeringGear3Up(); break;
            case '6': SteeringGear3Down(); break;
            case '7': SteeringGear4Up(); break;
            case '8': SteeringGear4Down(); break;
            default:break;
        }
     }else if(serVal[0]=='C'){
        switch(serVal[1])
        {
            case '1':kai1=0; break; //1开
            case '2': kai1=1; break; //1关
            case '3': kai2 =0; break; //2开
            case '4': kai2 =1; break; //2关
            case '5': kai3 =0; break; //3开
            case '6': kai3=1; break; //3关
            case '7': kai4 =0; break; //4开
            case '8': kai4 =1; break; //4关

default:break;
        }
     }
    }   
}
回复 支持 反对

使用道具 举报

发表于 2012-9-26 15:31:14 | 显示全部楼层
car.htm源码:用于web控制将下面源码粘到txt文本里把扩展名改成htm可以发到路由中也可以本地用火狐浏览器打开注意修改ip地址

<html>
<head>
<script>
var keydown=false;
function sendSer(value){
var controlHost=document.getElementById("controlHost").value;
document.getElementById("ser").src="http://"+controlHost+"/cgi-bin/web2ser?"+value;
}
function stopMoving(){
sendSer('A0');
}
function moveForward(){
sendSer('A1');
}
function turnLeft(){
sendSer('A2');
}
function moveBack(){
sendSer('A3');
}
function turnRight(){
sendSer('A4');
}
function shangzhuan(){
sendSer('A5');
}
function xiazhuan(){
sendSer('A6');
}
function zuozhuan(){
sendSer('A7');
}
function youzhuan(){
sendSer('A8');
}
function SteeringGear1Up(){
sendSer('B1');
}
function SteeringGear1Down(){
sendSer('B2');
}
function SteeringGear2Up(){
sendSer('B3');
}
function SteeringGear2Down(){
sendSer('B4');
}
function SteeringGear3Up(){
sendSer('B5');
}
function SteeringGear3Down(){
sendSer('B6');
}
function SteeringGear4Up(){
sendSer('B7');
}
function SteeringGear4Down(){
sendSer('B8');
}
function kai(){
sendSer('C1');
}
function guan(){
sendSer('C2');
}
function connectVideo(){
var videoHost=document.getElementById("videoHost").value;
document.getElementById("videoFrame").src=videoHost;
}
function checkKeyDown(evt) {
var evt = evt ? evt : (window.event ? window.event : null); //区分IE和FF来得到event
var code = evt.which ? evt.which :evt.keyCode; //区分IE和FF来得到 event.keyCode 或 event.which
//alert(code); 测试键码
if(!keydown){
if(code==87) //W
  moveForward()
else if(code==65) //A
  turnLeft()
else if(code==83) //S
  moveBack()
else if(code==68) //D
  turnRight()
else if(code==82) //R
  shangzhuan()
else if(code==70) //F
  xiazhuan()
else if(code==90) //Z
  zuozhuan()
else if(code==88) //X
  youzhuan()
else if(code==81) //Q
  stopMoving()
else if(code==67) //C
  kai()
else if(code==86) //V
   guan()

else if(code==38) //up
  SteeringGear1Up()
else if(code==40) //down
  SteeringGear1Down()
else if(code==37) //left
  SteeringGear2Up()
else if(code==39) //right
  SteeringGear2Down()
else if(code==33) //Pgup
  SteeringGear3Up()
else if(code==34) //Pgdn
  SteeringGear3Down()
else if(code==36) //home
  SteeringGear4Up()
else if(code==35) //end
  SteeringGear4Down()
keydown=true;
}
}
function checkKeyUp(evt) {
keydown=false;
var evt = evt ? evt : (window.event ? window.event : null);
var code = evt.which ? evt.which :evt.keyCode;
if(code==87)
stopMoving()
else if(code==65)
stopMoving()
else if(code==83)
stopMoving()
else if(code==68)
stopMoving()
else if(code==82)
stopMoving()
else if(code==70)
stopMoving()
else if(code==90)
stopMoving()
else if(code==88)
stopMoving()
else if(code==81)
stopMoving()

}
</script>
</head>
<body onkeydown="checkKeyDown(event)" onkeyup="checkKeyUp(event)">
<div style="float:left">
<img id="ser" width="1" height="1">
<table>
<tr><td colspan="3">控制端地址:<input type="input" id="controlHost" value="192.168.1.1" size="15" /></td></tr>
<tr><td/>
<td><input type="button" onmousedown="moveForward()" onmouseup="stopMoving()" value="前进(W)" /></td><td/></tr>
<tr><td><input type="button" onmousedown="turnLeft()" onmouseup="stopMoving()" value="左转(A)" /></td><td/>
<td><input type="button" onmousedown="turnRight()" onmouseup="stopMoving()" value="右转(D)" /></td></tr>
<tr><td/><td><input type="button" onmousedown="moveBack()" onmouseup="stopMoving()" value="后退(S)" /></td><td/></tr>
</table>
<table>
<tr><td></td><td>  </td>
</tr>

</table>
<table>
<table>
<tr><td/>
<td><input type="button" onclick="SteeringGear1Up()" value="舵机1上(↑)" /></td><td/></tr>
<tr><td><input type="button" onclick="SteeringGear2Up()" value="舵机2左(←)" /></td><td/>
<td><input type="button" onclick="SteeringGear2Down()" value="舵机2右(→)" /></td></tr>
<tr><td/><td><input type="button" onclick="SteeringGear1Down()" value="舵机1下(↓)" /></td><td/></tr>
</table>
<table>
<tr><td> <input type="button" onclick="SteeringGear3Up()" value="舵机3上(Pgup)" /></td>
<td> <input type="button" onclick="SteeringGear4Up()" value="舵机4上(Home)" /></td>
<td> <input type="button" onclick="kai()" value="开(C)" /></td></tr></tr>
<tr><td></td><td>  </td>
</tr>
<tr><td> <input type="button" onclick="SteeringGear3Down()" value="舵机3下(Pgdn)" /></td>
<td> <input type="button" onclick="SteeringGear4Down()" value="舵机4下( End)" /></td>
<td> <input type="button" onclick="guan()" value="关(v)" /></td></tr></tr>
</table>
<table>
<tr><td></td><td>  </td>
</tr>
<tr><td></td><td>  </td>
</tr>
</table>
<table>
<tr><td/>
<td><input type="button" onmousedown="shangzhuan()" onmouseup="stopMoving()" value="上(R)" /></td><td/></tr>
<tr><td><input type="button" onmousedown="xiazhuan()" onmouseup="stopMoving()" value="下(F)" /></td><td/>
<td><input type="button" onmousedown="zuozhuan()" onmouseup="stopMoving()" value="左(Z)" /></td></tr>
<tr><td/><td><input type="button" onmousedown="youzhuan()" onmouseup="stopMoving()" value="右(X)" /></td><td/></tr>
</table>
<p> </p>
<p> </p>
<p> </div>
<div style="float:left">
视频地址:<input type="input" id="videoHost" value="http://192.168.1.1:8080/?action=stream" size="40" />
<input type="button" onclick="connectVideo()" value="连接" />
<br/>
<iframe id="videoFrame" width="640" height="480" src=""/>
</div>
<body>
回复 支持 反对

使用道具 举报

发表于 2012-10-2 22:57:27 | 显示全部楼层
向前辈学习了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-4 21:32:21 | 显示全部楼层
谢谢,看来还要先学习编译:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 04:46 , Processed in 1.109313 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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