找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1804|回复: 2
打印 上一主题 下一主题
收起左侧

单片机HM电位器摇杆控制程序,ADC采集电压方向,易语言上位机接收

[复制链接]
跳转到指定楼层
楼主
ID:878235 发表于 2021-1-17 18:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:

#include "reg52.h"
#define SD 1

char KEY_XY;
char bdata ADC_BIT;
sbit ADC0=ADC_BIT^0;
sbit ADC1=ADC_BIT^1;
sbit ADC2=ADC_BIT^2;
sbit ADC3=ADC_BIT^3;

sbit ADC4=ADC_BIT^4;
sbit ADC5=ADC_BIT^5;
sbit ADC6=ADC_BIT^6;
sbit ADC7=ADC_BIT^7;


sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;

sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;


float  ADC21[9]={0,2.5,1.25,0.625,0.3125,0.15625,0.078125,0.03906,0.01953};


sbit CS=P2^2;
sbit CLK=P2^0;
sbit SDI =P2^1;
sbit SDO =P2^1;




//===================================
void init_ADC0832()
{
        CLK=0;yc(SD);
        
        CS=0;yc(SD);
        
        SDI=1;yc(SD);
        CLK=1;yc(SD);
        CLK=0;yc(SD);
        
        SDI=1;yc(SD);
        CLK=1;yc(SD);
        CLK=0;yc(SD);
        
        
        //SDI=0;yc(SD);
        SDI=KEY_XY=!KEY_XY;yc(SD);
        CLK=0;yc(SD);
        CLK=0;yc(SD);
        
        // 设置通道 110 CH0单通道输入
        
}

float read_ADC0832()
{
        float re_data;
        re_data=0;
        //千万记住,局部动态变量的初值不可省略
        CLK=1;
        CLK=0;
        CLK=1;
        //第一个数据不要

        //0        
        CLK=0;
        ADC0=SDO;
        CLK=1;
        //1
        CLK=0;
        ADC1=SDO;
        CLK=1;
        


  //2
        CLK=0;
        ADC2=SDO;
  CLK=1;

        
        
        //3
        CLK=0;
        ADC3=SDO;
        CLK=1;

        
        
        //4
        CLK=0;
        ADC4=SDO;
        CLK=1;
        
        //5
        CLK=0;
  ADC5=SDO;
  CLK=1;
        
        
        
        //6
        CLK=0;
  ADC6=SDO;
        CLK=1;
        
        //7
        CLK=0;
  ADC7=SDO;
        CLK=1;
        
        re_data=ADC21[ADC0*1]+ADC21[ADC1*2]+ADC21[ADC2*3]+ADC21[ADC3*4]+ADC21[ADC4*5]+ADC21[ADC5*6]+ADC21[ADC6*7]+ADC21[ADC7*8];
        return(re_data);
        
}

void rs232_init(void)
{
    SCON=0x50;           //设定串口工作方式
    PCON=0x00;           //波特率不倍增

    TMOD=0x20;           //定时器1工作于8位自动重载模式, 用于产生波特率
    EA=1;
    ES = 1;              //允许串口中断
    TL1=0xA0;
    TH1=0xff;             //波特率9600
    TR1=1;

         
}
void senddata(char dat)
{

         
           
         
        
               

//-------------------------



                        TI = 0;
            SBUF = dat;
      while(!TI);

                  



}



main()
{

        char num;
        char D1;
//        char D2;
//        char D3;
//        char D4;
        
rs232_init();

while(1)
{   

  init_ADC0832();
        D1=read_ADC0832();
        CS=1;
//        D2=data_num*10-D1*10;
//        D3=data_num*100-D1*100-D2*10;
//        D4=data_num*1000-D1*1000-D2*100-D3*10;
//  
//           
                  if(KEY_XY)
           {//X 数据
              
               num=num&0x0f;
                           num=num+(D1<<4);
                 }
else
    { //Y 数据
                        num=num&0xf0;
                        num=num+D1;
                        ;
    }

//     num=D1;
                 senddata(num);
                 yc(8);
}

}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:878235 发表于 2021-1-17 18:58 | 只看该作者
.版本 2

.程序集 窗口程序集1

.子程序 __启动窗口_创建完毕

端口1.启动 ()




.子程序 _端口1_数据到达
.参数 数据字节值, 整数型

变量X = 右移 (数据字节值, 4)
变量Y = 位与 (数据字节值, 15)

编辑框X.内容 = 到文本 (变量X)
编辑框Y.内容 = 到文本 (变量Y)


标签1.左边 = 标签1.左边 + (2 - 变量X) × 4
标签1.顶边 = 标签1.左边 + (2 - 变量Y) × 4



回复

使用道具 举报

板凳
ID:878235 发表于 2021-1-17 18:58 | 只看该作者
易语言自己发挥,组件就是一个端口,接收数据处理就可以了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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