导航:首页 > 操作系统 > 绳式位移传感器51单片机程序

绳式位移传感器51单片机程序

发布时间:2023-04-24 02:56:46

‘壹’ 谁有51单片机霍尔传感器测速程序要完整的能用的,C语言写的谢谢大虾还有就是下面计数器二进制转换成十

这个很简单 TL1放的是计数器初值的低8位,TH1放的是高8位,所以把这两个要组合成一个数那就需要把高8位的左移8次扒宏,然后加上低8位的就是计数器初值了,至于你说的2进制转10进制,其实不用转的毁竖,在内存当中的值是一样的,只是代码的表示纤此大方式不一样而已。

‘贰’ 51单片机,利用0和1两个数字组成16种模式,并用四个开关控制数码显示一位密码求程序设计

以下是使用51单片机(如STC89C52)和4个开关来控敏搭槐制数码管显示一位密码的简单示例代码。假设使用的是共阴数码管,并且数码管的引脚连接到了单片机的P0口。
#include <reg52.h> // 引入单片机寄存器定义头文件// 数码管显示的密码模式,共16种,每种模式使用4位二进制表示unsigned char password[16] = { 0x3F, // 0b00111111, 模式0
0x06, // 0b00000110, 模式1
0x5B, // 0b01011011, 模式2
0x4F, // 0b01001111, 模式3
0x66, // 0b01100110, 模式4
0x6D, // 0b01101101, 模式5
0x7D, // 0b01111101, 模式6
0x07, // 0b00000111, 模桥友式7
0x7F, // 0b01111111, 模式8
0x6F, // 0b01101111, 模式9
0x77, // 0b01110111, 模式10
0x7C, // 0b01111100, 模式11
0x39, // 0b00111001, 模式12
0x5E, // 0b01011110, 模式13
0x79, // 0b01111001, 模式14
0x71 // 0b01110001, 模式15};void main() { unsigned char i = 0; // 密码模式的索引

while (1) { // 读取四个枝竖开关的状态,每个开关对应一个二进制位
unsigned char switchValue = (P1 & 0x0F); // 根据开关状态选择密码模式
i = switchValue; // 设置数码管显示的密码模式
P0 = password[i]; // 简单延时
for (unsigned int j = 0; j < 1000; j++);

}
}

以上代码通过读取四个开关(连接到P1口的低4位)的状态来选择密码模式,并将选择的密码模式通过P0口设置到数码管上显示。

‘叁’ 求用51单片机控制ADXL345测量角度的程序,通过ADXL345传感器,用51单片机控制,测量倾角的程序!

//***************************************
// GY-29 ADXL345 IIC测试程序
// 使用单片机STC89C51
// 晶振:11.0592M
// 显示:LCD1602
// 编译环境 Keil uVision2
// 参考宏晶网站24c04通信程序
// 时间:2011年3月1日
// QQ:531389319
//****************************************
#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0 //LCD1602数据端口
sbit SCL=P1^0; //IIC时钟引脚定义
sbit SDA=P1^1; //IIC数据引脚定义
sbit LCM_RS=P2^0; //LCD1602命令端口
sbit LCM_RW=P2^1; //LCD1602命令端口
sbit LCM_EN=P2^2; //LCD1602命令端口
#define SlaveAddress 0xA6 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
BYTE BUF[8]; //接收数据缓存区
uchar ge,shi,,qian,wan; //显示变量
int dis_data; //变量
int data_xyz[3];

void delay(unsigned int k);
void InitLcd(); //初始化lcd1602
void Init_ADXL345(void); //初始化ADXL345
void WriteDataLCM(uchar dataW);
void WriteCommandLCM(uchar CMD,uchar Attribc);
void DisplayOneChar(uchar X,uchar Y,uchar DData);
void conversion(uint temp_data);
void Single_Write_ADXL345(uchar REG_Address,uchar REG_data); //单个写入数据
uchar Single_Read_ADXL345(uchar REG_Address); //单个读取内部寄存器数据
void Multiple_Read_ADXL345(); //连续的读取内部寄存器数据
//------------------------------------
void Delay5us();
void Delay5ms();
void ADXL345_Start();
void ADXL345_Stop();
void ADXL345_SendACK(bit ack);
bit ADXL345_RecvACK();
void ADXL345_SendByte(BYTE dat);
BYTE ADXL345_RecvByte();
void ADXL345_ReadPage();
void ADXL345_WritePage();
//-----------------------------------
//*********************************************************
void conversion(uint temp_data)
{
wan=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余运算
qian=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余运算
=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余运算
shi=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余运算
ge=temp_data+0x30;
}
/*******************************/
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}}
}
/*******************************/
void WaitForEnable(void)
{
DataPort=0xff;
LCM_RS=0;LCM_RW=1;_nop_();
LCM_EN=1;_nop_();_nop_();
while(DataPort&0x80);
LCM_EN=0;
}
/*******************************/
void WriteCommandLCM(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable();
LCM_RS=0;LCM_RW=0;_nop_();
DataPort=CMD;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
/*******************************/
void WriteDataLCM(uchar dataW)
{
WaitForEnable();
LCM_RS=1;LCM_RW=0;_nop_();
DataPort=dataW;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
/***********************************/
void InitLcd()
{
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0c,1);
}
/***********************************/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
/**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{
WORD n = 560;
while (n--);
}
/**************************************
起始信号
**************************************/
void ADXL345_Start()
{
SDA = 1; //拉高数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 0; //产生下降沿
Delay5us(); //延时
SCL = 0; //拉低时钟线
}
/**************************************
停止信号
**************************************/
void ADXL345_Stop()
{
SDA = 0; //拉低数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 1; //产生上升沿
Delay5us(); //延时
}
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void ADXL345_SendACK(bit ack)
{
SDA = ack; //写应答信号
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
/**************************************
接收应答信号
**************************************/
bit ADXL345_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}
/**************************************
向IIC总线发送一个字节数据
**************************************/
void ADXL345_SendByte(BYTE dat)
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
ADXL345_RecvACK();
}
/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE ADXL345_RecvByte()
{
BYTE i;
BYTE dat = 0;
SDA = 1; //使能内部上拉,准备读取数据,
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1;
SCL = 1; //拉高时钟线
Delay5us(); //延时
dat |= SDA; //读数据
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
return dat;
}
//******单字节写入*******************************************
void Single_Write_ADXL345(uchar REG_Address,uchar REG_data)
{
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页
ADXL345_SendByte(REG_data); //内部寄存器数据,请参考中文pdf22页
ADXL345_Stop(); //发送停止信号
}
//********单字节读取*****************************************
uchar Single_Read_ADXL345(uchar REG_Address)
{ uchar REG_data;
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(REG_Address); //发送存储单元地址,从0开始
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress+1); //发送设备地址+读信号
REG_data=ADXL345_RecvByte(); //读出寄存器数据
ADXL345_SendACK(1);
ADXL345_Stop(); //停止信号
return REG_data;
}
//*********************************************************
//
//连续读出ADXL345内部加速度数据,地址范围0x32~0x37
//
//*********************************************************
void Multiple_read_ADXL345(void)
{ uchar i;
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(0x32); //发送存储单元地址,从0x32开始
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress+1); //发送设备地址+读信号
for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF
{
BUF[i] = ADXL345_RecvByte(); //BUF[0]存储0x32地址中的数据
if (i == 5)
{
ADXL345_SendACK(1); //最后一个数据需要回NOACK
}
else
{
ADXL345_SendACK(0); //回应ACK
}
}
ADXL345_Stop(); //停止信号
Delay5ms();
}

//*****************************************************************
//初始化ADXL345,根据需要请参考pdf进行修改************************
void Init_ADXL345()
{
Single_Write_ADXL345(0x31,0x0B); //测量范围,正负16g,13位模式
Single_Write_ADXL345(0x2C,0x08); //速率设定为12.5 参考pdf13页
Single_Write_ADXL345(0x2D,0x08); //选择电源模式 参考pdf24页
Single_Write_ADXL345(0x2E,0x80); //使能 DATA_READY 中断
Single_Write_ADXL345(0x1E,0x00); //X 偏移量 根据测试传感器的状态写入pdf29页
Single_Write_ADXL345(0x1F,0x00); //Y 偏移量 根据测试传感器的状态写入pdf29页
Single_Write_ADXL345(0x20,0x05); //Z 偏移量 根据测试传感器的状态写入pdf29页
}
//***********************************************************************
//显示x轴
void display_x()
{ float temp;
dis_data=(BUF[1]<<8)+BUF[0]; //合成数据
if(dis_data<0){
dis_data=-dis_data;
DisplayOneChar(2,0,'-'); //显示正负符号位
}
else DisplayOneChar(2,0,' '); //显示空格
temp=(float)dis_data*3.9; //计算数据和显示,查考ADXL345快速入门第4页
conversion(temp); //转换出显示需要的数据
DisplayOneChar(0,0,'X'); //第0行,第0列 显示X
DisplayOneChar(1,0,':');
DisplayOneChar(3,0,qian);
DisplayOneChar(4,0,'.');
DisplayOneChar(5,0,);
DisplayOneChar(6,0,shi);
DisplayOneChar(7,0,'g');
}
//***********************************************************************
//显示y轴
void display_y()
{ float temp;
dis_data=(BUF[3]<<8)+BUF[2]; //合成数据
if(dis_data<0){
dis_data=-dis_data;
DisplayOneChar(2,1,'-'); //显示正负符号位
}
else DisplayOneChar(2,1,' '); //显示空格
temp=(float)dis_data*3.9; //计算数据和显示,查考ADXL345快速入门第4页
conversion(temp); //转换出显示需要的数据
DisplayOneChar(0,1,'Y'); //第1行,第0列 显示y
DisplayOneChar(1,1,':');
DisplayOneChar(3,1,qian);
DisplayOneChar(4,1,'.');
DisplayOneChar(5,1,);
DisplayOneChar(6,1,shi);
DisplayOneChar(7,1,'g');
}
//***********************************************************************
//显示z轴
void display_z()
{ float temp;
dis_data=(BUF[5]<<8)+BUF[4]; //合成数据
if(dis_data<0){
dis_data=-dis_data;
DisplayOneChar(10,1,'-'); //显示负符号位
}
else DisplayOneChar(10,1,' '); //显示空格
temp=(float)dis_data*3.9; //计算数据和显示,查考ADXL345快速入门第4页
conversion(temp); //转换出显示需要的数据
/*
DisplayOneChar(10,0,'Z'); //第0行,第10列 显示Z
DisplayOneChar(11,0,':');
DisplayOneChar(11,1,qian);
DisplayOneChar(12,1,'.');
DisplayOneChar(13,1,);
DisplayOneChar(14,1,shi);
DisplayOneChar(15,1,'g');
*/
}

//*********************************************************
//******主程序********
//*********************************************************
void main()
{
uchar devid;
float Roll,Pitch,Q,T,K;
delay(500); //上电延时
InitLcd(); //液晶初始化ADXL345
Init_ADXL345(); //初始化ADXL345
devid=Single_Read_ADXL345(0X00);//读出的数据为0XE5,表示正确
while(1) //循环
{
Init_ADXL345(); //初始化ADXL345
Multiple_Read_ADXL345(); //连续读出数据,存储在BUF中
data_xyz[0]=(BUF[1]<<8)+BUF[0]; //合成数据
data_xyz[1]=(BUF[3]<<8)+BUF[2]; //合成数据
data_xyz[2]=(BUF[5]<<8)+BUF[4]; //合成数据
//分别是加速度X,Y,Z的原始数据,10位的
Q=(float)data_xyz[0]*3.9;
T=(float)data_xyz[1]*3.9;
K=(float)data_xyz[2]*3.9;
Q=-Q;
Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180); //X轴角度值
Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180); //Y轴角度值
conversion(Roll); //转换出显示需要的数据X轴,或者Y轴
DisplayOneChar(9,1,'A');
DisplayOneChar(10,1,':');
DisplayOneChar(11,1,);
DisplayOneChar(12,1,shi);
DisplayOneChar(13,1,ge);
delay(200); //延时
}
}

‘肆’ 拉线位移传感器原理及信号输出方式介绍

随着科学技术的的不断进步,人们的生活发生了很大的变化,大家的住房比以前更高了并且更加的牢固了,还有路也修的四通八达,现在人们想去都特别方便了,有汽车、火车、高铁、飞机等等,很多种交通工具可以供大家选择。可以说,人们的生活发生了翻天覆地的变化。那么,大家知不知道这些建筑机械上面的直线导轨系统的组成呢?大家了解拉线位移传感器吗?下面小编给大家介绍一下吧。

备指

拉线位移传感器输出方式

拉线位移传感器的信号输出方式分为数字信号输出和模拟信号输出,数字输出型可以选择增量旋转编码器、绝对值编码器等,输出信号为方波ABZ信号或格雷码信号,行程最大可以做到15000毫米,线性精度最大0.01%,分辨力根据配置不同最大可以达到0.001毫米/脉冲。

拉线位移传感器模拟输出型可以选择精密电位器、霍尔编码器、绝对值编码器等,输出信号可以为RS485,dp总线,4-20毫安、0-5伏、0-10伏、串行SSI和电阻信号等,最大行程可以达到15000毫米。BEN绝对值拉线位移传感器输出信号:SSI、4-20MA、profibus-dp、DEVicenet、并行、二进制码、BiSS、ISI、CANopen、Endat及Hiperface等。

拉线位移传感器原理

拉线位移传感器的功能是把机械运动转换成可以计量,记录或传送的电信号。拉线位移传感器由可拉伸的不锈钢绳绕在一个有螺纹的轮毂上,此轮毂与一个精密旋转感应器连接在一起,感应器可以是增量编码器,绝对(独立)编码器,混合或导电塑料旋转电位计,同步器或解析器。

操作上,拉绳式位移传感器安装在固定位置上,拉绳缚在移动物体上。拉绳直线运动和移动物体运动轴线对准。运动发生时,拉绳伸展和收缩。一个内部弹簧保证拉绳的张紧度不变。带螺纹的轮毂带动精密旋转感应器旋转,输出一个与拉绳移动距离成比例的电信号。测量输出信号可以得出运动物体的位移、方向或速率。

常用参数有测量行程、输出信号模式、线性度、重复性、分辨率、线径规格、出线口拉力、最大往返速度、重量、输入电阻值、功率、工作电压、工作温度、震动、防护等级等。

拉线位移传感器的应用

拉线位移传感器特别适合直线导轨系统,液压气缸系统、仿告配试验机、伸缩系统(叉车、压机、升降机、弯管机、折弯机等),起重机或缆绳绞车,水库大坝保护系统,闸门开度控制系统、试验机压力机械、液压万能实验机械,仓储位置定位,压力机械,造纸机械,纺织机械,金属板材机械,包装机械,印刷机械,水平控制仪,建筑机械,水平控制仪、建筑机械、工业机器人、射出机、木工机械、电梯、空气压缩机/油压机、高度机、X-Y轴及其它长度位移等相关尺寸测量和位置控制,特别适合电液伺服液压万能试验机的控制。完全可以替代光栅尺,其它应用场合可以定制,完全可以实现低成本的高精度测量。

通过小编给大家详细的介绍,相信大家应该对拉线位移传感器有了一定的了解。拉线位移传感器是一款安装尺寸小、结构紧凑、测量行程大、精度高的传感器,主要运用于一些大型建筑机械等等。所以拉线位移传感器对于我们的日常生活还是有很大的作用的,拉线位移传感器使我们的生活更加的方友橘便,也为我们的出行提高了安全。当然,拉线位移传感器还有很多的功能,这需要大家进一步去了解。


土巴兔在线免费为大家提供“各家装修报价、1-4家本地装修公司、3套装修设计方案”,还有装修避坑攻略!点击此链接:【https://www.to8to.com/yezhu/zxbj-cszy.php?to8to_from=seo__m_jiare&wb】,就能免费领取哦~

‘伍’ 51单片机,用汇编语言编写程序,10秒内对外部脉冲进行计数,并数出外部脉冲频率。求高手编写程序。

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H

MAIN:
MOV TMOD,#51H

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

MOV TH1,#0

MOV TL1,#0

SETB TR0

SETB TR1

SETB ET0

SETB EA

CLR A

MOV R2,#0

LOOP:
SJMP $

T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

INC A

CJNE A,#20,T0E

MOV A,#0

INC R2

CJNE R2,#10,T0E

MOV R2,#0

MOV R1,TH1

MOV R0,TL1

MOV B,#10

LCALL DIV16

MOV P1,R0

T0E:
RETI

;R1:R0/B=R1:R0
DIV16:
MOV R7,#08H
MOV B,#6
DIV1:
CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
CLR C
SUBB A,B
JC DIV2
MOV R1,A
INC R7
DIV2:
DJNZ R7,DIV1
RET
END

‘陆’ 拉线位移传感器产生电压信号,用STC12C5A60S2单片机读取信号,然后将位移值保存,怎样用c编程

XPS系列拉绳位移传感器,结构小巧,安装空间尺寸小。测量行程长(100~100000mm),精度高(0.25~0.1%FS),防护等级IP65。外壳和线轮均经过防腐处理,牵引绳为不锈钢外敷特氟龙,可以在恶劣的环境下工作。可选输出方式有:电阻型、电压型、电流型、增量脉冲型、绝对脉冲型、RS485、SSI(可实现双路输出)。
拉绳位移传感器
星宇“evernew”XPS系列拉绳位移传感器/编码器是直线位移传感器在结构上的精巧集成,充分结合了角度传感器和直线位移传感器的优点,成为一款结构紧凑、测量行程长、安装空间尺寸小、具有高精度测量的优良传感器,为解决最常见的卡线问题,本产品在结构设计上匠心独具的精巧设计以及采用全套数控精密加工的完美设计及加工工艺,真正解决的拉绳传感器长久以来的卡线问题,该系列产品具有很大的选择空间,行程从100mm至100000mm不等,具有模拟电流、电压和脉冲A、B、Z相,RS485,SSI等数字输出,满足大行程.高精度各种信号需求,为广大客户所采用。
星宇“evernew”系列产品郑重承诺,自购买之日起十五日内,如确认产品不能达到双方约定的标准,无法正常工作,我公司承诺全额退款
应用范围:
仓储位置定位、水库大坝保护,闸门开度控制、压力机械、造纸机械、纺织机械、金属板材机械、包装机械、印刷机械、水平控制仪、建筑机械、工业机器人、射出机、木工机械、电梯、空气压缩机/油压机、高度机、X-Y轴及其它长度位移、液位等相关尺寸量测和位置控制。
相关产品厂家推荐 上海星宇高科 xyzsensor.cn

‘柒’ 位移传感器位移变化时的产生的电压信号经A/D转换成数字信号传入单片机然后通过LCD显示出位移数据的程序

#include <reg52.h>
#include <absacc.h>

#define uchar unsigned char
#define uint unsigned int
#define WX XBYTE[0x38ff]
#define DX XBYTE [0x58ff]
#define AD_IN1 XBYTE [0x78ff]

sbit EOC=P3^3;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar m;

void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++);
}

void display(uint numn)
{
uchar ge,shi,;
ge=numn%10;
shi=numn%100/10;
=numn/100;

WX=0x20;
DX=table[];
delay(5);

WX=0x10;
DX=table[shi];
delay(5);

WX=0x08;
DX=table[ge];
delay(5);
}

void main()
{
EA=1;
EX1=1;
IT1=0;
AD_IN1=0;
while(1)
{
display(m);
}
}

void ads() interrupt 2
{
m=AD_IN1;
AD_IN1=0;
}

数码滚世郑管现实大颂位移数字信号。 如果精度不够,你可以自己调返缺整。
多多交流。

‘捌’ 基于51单片机转速测量的程序,望高手帮我解释一下。

#include <reg51.h>
#include <INTRINS.H>

#define FOSC 11.0592

unsigned int speed;
unsigned char key;
unsigned char led_table[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};
long speed_count,speed_count1;
unsigned char speed_check;
unsigned int second_flag;
unsigned char speed_table[4];
unsigned char speed_table1[10];

//定时器频率1000Hz
void timer1_init(void)
{
EA=0;
TMOD=0x10;
//TH1=1000*FOSC/12/256;
//TL1=(unsigned int)(1000*FOSC/12)%256;
TH1=254;
TL1=51;
TR1=1;
TCON|=0X04; //外部中断下降触发
EX1=1; //允许外部中断
ET1=1;
EA=1;

}
void int1_routine(void) interrupt 2
{
speed_count++;
P1^=0X02;
}

void timer1_routine(void) interrupt 3
//void timer1_routine(void)
{
TH1=254;
//TH1=0xf0;
TL1=51;
//speed_count++;
second_flag++;

}

void main(void)
{
unsigned int i,j,k;
// unsigned char sum;
unsigned speed_table[3];
long time_id;
timer1_init();
speed=0;
P2=0x0f;
P0=0xf0;
P3=0x08;
key=0;
P1=0x00;
speed_check=0;
while(1)
{

//P1^=0XFE;
j=1;
//speed=1234;
speed_table[0]=speed/1000;
speed_table[1]=speed%1000/100;
speed_table[2]=speed%100/10;
speed_table[3]=speed%10;
for(i=0;i<4;i++)
{
P2=j^0xff;
j<<=1;
P0=(led_table[speed_table[i]])&0xfe;
for(k=0;k<250;k++) ;
}
//speed=speed_count;

if(second_flag>=1000) /*中断1000次进入 */
{

second_flag=0;
time_id++;
speed_table1[time_id%10]=speed_count;/*外部中断量转存(是很聪明的方法学习了)*/
speed_count=0;
speed=(speed_table1[0]+speed_table1[1]+speed_table1[2]+speed_table1[3]+speed_table1[4]+speed_table1[5]+speed_table1[6]+speed_table1[7]+speed_table1[8]+speed_table1[9])*6; /*(10X6)10秒的外部中断量乘以6就是转速了*/
//speed=speed/2+(speed_table[0]+speed_table[1]+speed_table[2])*6;
}

}

}

‘玖’ 拉线位移传感器信号如何处理才能与单片机相连

滤波,滤除干扰信号,根据传感器的输出的范围,如果输出太小,要经过放大处理,再与单片机的adc相连。

‘拾’ 求用51单片机控制同时控制两个4相小功率步进电机,使电机正反转,加速,减速的汇编程序。。跪求

实验源程序碰态
P55A equ 288h ;8255A口输出
P55C equ 28ah ;8255C口输入
P55CTRL equ 28bh ;8255控制口
DATA SEGMENT
BUF db 0
MES DB 'K0-K6 ARE SPEED CONTROL',0AH,0DH
DB '老吵吵K6 IS THE LOWEST SPEED',0AH,0DH
DB 'K0 IS THE LOWEST SPEED',0AH,0DH
DB '侍侍K7 IS THE DIRECTION CONTROL',0AH,0DH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,CS
MOV DS,AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES
MOV AH,09H
INT 21H
MOV DX,P55CTRL
MOV AL,8BH
OUT DX,AL ;8255C输入,A输出
MOV BUF,33H
OUT1:
MOV AL,BUF
MOV DX,P55A
OUT DX,AL
MOV AH,1
INT 16H
JE IN1 ;有无键按下
MOV AH,4CH
INT 21H
IN1:
MOV DX,P55C
IN AL,DX ;读开关状态
TEST AL,01H
JNZ K0
TEST AL,02H
JNZ K1
TEST AL,04H
JNZ K2
TEST AL,08H
JNZ K3
TEST AL,10H
JNZ K4
TEST AL,20H
JNZ K5
TEST AL,40H
JNZ K6

STOP:
MOV DX,P55A
MOV AL,0FFH
JMP OUT1

K0:
MOV BL,10H

SAM:
TEST AL,80H ;K7是否为
JZ ZX0
JMP NX0

K1:
MOV BL,18H
JMP SAM
K2:
MOV BL,20H
JMP SAM
K3:
MOV BL,40H
JMP SAM
K4:
MOV BL,80H
JMP SAM
K5:
MOV BL,0C0H
JMP SAM
K6:
MOV BL,0FFH
JMP SAM
ZX0:
CALL DELAY
MOV AL,BUF
ROR AL,1 ;循环右移
MOV BUF,AL
JMP OUT1
NX0:
CALL DELAY
MOV AL,BUF
ROL AL,1 ;循环左移
MOV BUF,AL
JMP OUT1
DELAY PROC NEAR
DELAY1:
MOV CX,05A4H
DELAY2:
LOOP DELAY2
DEC BL
JNZ DELAY1
RET
DELAY ENDP
CODE ENDS
END START

阅读全文

与绳式位移传感器51单片机程序相关的资料

热点内容
android赛风 浏览:226
程序员面试经历 浏览:983
苹果怎么设置app只用数据 浏览:855
学以为己pdf 浏览:231
为什么安卓手机进步很大 浏览:342
mfc软件加密 浏览:326
ubuntu上传文件命令 浏览:712
合约马丁格尔源码 浏览:971
慕课文件夹名称 浏览:671
用app国潮手帐怎么做 浏览:254
解压娱乐编辑器 浏览:615
wppdf 浏览:265
sshlinux文件下载 浏览:175
使用ping命令检查网络问题 浏览:751
金手指文件放哪个文件夹 浏览:44
想创app软件怎么操作 浏览:201
为啥电脑总是显示没有文件夹 浏览:675
iphone显示无法验证app怎么回事 浏览:968
推荐解压好游戏 浏览:277
cpu服务器过载怎么办 浏览:620