资源简介
单片机读取光栅编码器角度程序,程序解释可查看本人博客,里面有详细解释

代码片段和文件信息
//头文件
#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入门教程
相关资源
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
- 毕业设计 单片机 对讲机 protues仿真
- 数据采集系统——ADC0808的应用,单片
评论
共有 条评论