资源简介
单片机读取光栅编码器角度程序,程序解释可查看本人博客,里面有详细解释
代码片段和文件信息
//头文件
#include
#include//SEI()函数_NOP()BIT();
#define uint unsigned int
#define uchar unsigned char
//延时函数
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(11.0592*143-2);i++);//定义晶振频率
}
void delay(unsigned int n)//延时毫妙级
{
unsigned int i;
for(i=0;i delay_1ms();
}
//4位数码管驱动函数
#define SCLK0 (PORTB &=~BIT(0))//定义接线口,需要添加#include才能使用
#define SCLK1 (PORTB |=BIT(0))
#define RCLK0 (PORTB &=~BIT(1))
#define RCLK1 (PORTB |=BIT(1))
#define DAT0 (PORTB &=~BIT(2))
#define DAT1 (PORTB |=BIT(2))
unsigned char number[]={0xc00xf90xa40xb00x990x920x820xf80x800x900x400x790x240x300x190x120x020x780x000x10};//0~9不带小数点,10~19带小数点
unsigned char location[]={0x000x010x020x040x08};//0~4
void shumaguan(unsigned char weizhiunsigned char shuzi)
{ unsigned char inum; //定义一个无字符串变量
num=number[shuzi];
for(i=0;i<8;i++) //for 循环,循环8次,把一个数变成二进制发送出去
{
SCLK0;
if((num&0x80)==0)
DAT0;
else
DAT1;
num=num<<1;
SCLK1; // 把595频率置高
}
num=location[weizhi];
for(i=0;i<8;i++) //for 循环,循环8次,把一个数变成二进制发送出去
{
SCLK0;// 把595 SCLK频率置低电平
if((num&0x80)==0)
DAT0;
else
DAT1;
num=num<<1;
SCLK1;
}
RCLK0;
_NOP();_NOP();_NOP();_NOP();_NOP(); //延时函数,系统自带
RCLK1;
}
unsigned char encoder_A;//encoder_A需要初始化 encoder_A=(PIND&0x0c)/4;
unsigned angle;//编码器角度变量
void encoder(unsigned int X)//X为编码器线数
{
unsigned char B;
CLI();
B=encoder_A;
encoder_A=(PIND&0x0c)/4;//使用外部中断0,外部中断1
if((B==0 && encoder_A==1)||(B==1 && encoder_A==3)||(B==3 && encoder_A==2)||(B==2 && encoder_A==0))
{
angle=angle+9000/X;
if(angle==36000)angle=0;
}
else if ((B==0 && encoder_A==2)||(B==2 && encoder_A==3)||(B==3 && encoder_A==1)||(B==1 && encoder_A==0))
{
if(angle==0)angle=36000;
angle=angle-9000/X;
}
else ;
SEI();
}
//定义MEGA16接口输入输出
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x00;
}
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x05;
GICR = 0xC0;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
encoder_A=(PIND&0x0c)/4;
while(1)
{
shumaguan(1angle%100/10);
shumaguan(2angle%1000/100+10);
shumaguan(3angle%10000/1000);
shumaguan(4angle/10000);
}
}
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
encoder(360);
}
#pragma interrupt_handler int1_isr:iv_INT1
void int1_isr(void)
{
encoder(360);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1 2019-06-05 22:18 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605221814
文件 1799 2019-06-05 22:23 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605222312
文件 1801 2019-06-05 22:23 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605222328
文件 1805 2019-06-05 22:23 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605222344
文件 2528 2019-06-05 22:34 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605223410
文件 2578 2019-06-05 22:52 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605225218
文件 2590 2019-06-05 22:53 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605225332
文件 2581 2019-06-05 22:55 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190605225508
文件 2449 2019-06-06 21:36 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606213622
文件 2501 2019-06-06 21:39 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606213914
文件 2478 2019-06-06 21:42 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606214236
文件 2480 2019-06-06 21:43 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606214318
文件 2680 2019-06-06 22:07 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606220748
文件 2673 2019-06-06 22:09 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606220940
文件 2683 2019-06-06 22:10 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606221030
文件 2680 2019-06-06 22:14 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606221416
文件 2699 2019-06-06 22:18 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606221822
文件 2701 2019-06-06 22:18 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606221830
文件 2727 2019-06-06 22:19 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606221950
文件 2727 2019-06-06 22:20 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222008
文件 2824 2019-06-06 22:25 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222532
文件 2845 2019-06-06 22:26 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222642
文件 2851 2019-06-06 22:28 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222820
文件 2888 2019-06-06 22:28 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222848
文件 2889 2019-06-06 22:28 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606222858
文件 2886 2019-06-06 22:33 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606223314
文件 2977 2019-06-06 22:39 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606223930
文件 2981 2019-06-06 22:39 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606223944
文件 3004 2019-06-06 22:41 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606224104
文件 3004 2019-06-06 22:41 光电编码器-单片机程序\BACKUP\shumaguanxiaoshudian.c.190606224116
............此处省略78个文件信息
- 上一篇:步进电机S型曲线生成器
- 下一篇:DOS_基础教程DOS入门教程
相关资源
- proteus 双机通信仿真简单实用的单片机
- c51单片机的经典密码锁keil c
- 基于单片机的流量控制系统设计
- 利用单片机定时器产生的占空比可调
- 51单片机超声测距汇编
- 基于51单片机12864画点画线画圆的程序
- 倒车雷达超声波测距系统
- iccavr atmega128 实验程序
- 波形发生器 Proteus
- STC15 万年历程序
- 基于两块430单片机及nrf24l01无线数据传
- 基于ATmega128的BK-AVR128开发板Proteus仿真
- 单片机和LCD1602实现的简易计算器
- 51单片机热敏电阻测温查表程序
- 单片机基础第三版课后答案
- 坦克大战—单片机+proteus仿真
- 基于单片机的温室大棚温湿度亮度自
- 电风扇模拟控制系统设计
- 基于AT89C51单片机的电子计时牌设计
- 用51单片机设计的GPS定位系统论文
- 基于51单片机的CC1100CC1101发送和接收的
- 基于C51单片机的简单控制灯光的程序
- 51单片机 经典4位数码管显示,带闪烁
- 基于单片机的智能交通灯控制系统设
- 基于单片机的液位控制系统设计
- 51单片机控制BMP180气压传感器 并通过
- 单片机控制冒泡排序 数码管显示
- max197的程序与单片机通讯含protel原理
- DS18B20温度采集+串口发送+模块化编程
- 基于单片机设计的脉搏测量仪(毕设
评论
共有 条评论