单片机输出脉冲的C语言简易程序,AVR单片机驱动二相步进电机(单极驱动)简易程序,带串口控制...
AVR单片机驱动二相步进电机(单极驱动)简易程序,带串口控制。
编译器为ICC6.31A;
#include"iom16v.h"
#include"macros.h"
#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler usart:14
uchar i;
uchar const *p;
uchar zf=1; //电机正反转标志;
uchar k1=5;
//uchar const timer2dath[10]={};
//uchar const timer2datl[10]={};
unsigned char const suzhu1[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar const bjdjdat[48]={0x80,0xa0,0x20,0x60,0x40,0x50,0x10,0x90,
0x80,0x90,0x10,0x50,0x40,0x60,0x20,0xa0,
0x80,0x20,0x40,0x10,0x80,0x20,0x40,0x10,
0x80,0x10,0x40,0x20,0x80,0x10,0x40,0x20,
0xa0,0x60,0x50,0x90,0xa0,0x60,0x50,0x90,
0xa0,0x90,0x50,0x60,0xa0,0x90,0x50,0x60
};//设置单片机IO口高低电平数据组,用以驱动步进电机的各相按需通电;
uint const timer1dat[11]={36000,23000,13000,7000,4300,3000,2500,2100,1800,1700,0};//定时器1定时数据,用于控制电机的转速,定时越短转速越快;
uchar uartdat[4]={0,0,0,0}; //划出串行通信时所需的寄存器;
uchar add,open,jslopen;
void siansi(unsigned int dat,unsigned char bit,unsigned int time)//数码管显示函数
{
//PORTA&=~BIT(4);
PORTC&=~BIT(7);
PORTA&=~0x17;
PORTB=suzhu1[dat];
PORTA|=bit ;
PORTA|=BIT(4);
PORTC|=BIT(7);
while(time--);
}
void ioinit()//IO口初始化;
{
DDRB=0XFF;
DDRD=0XF3;
DDRA|=0X17;
DDRC|=0X80;
PORTD|=0X0f;
}
void usart()//串行接收中断处理;
{
uchar a;
a=UDR;
if(a==168)
{
open=1;
add=0;
}
if(a==138&&open)
{
open=0;
uartdat[add]=a;
jslopen=1;
}
if(open)
{
uartdat[add]=a;
add++;
}
}
void jsl()//一帧数据处理;
{
uchar j;
jslopen=0;
switch(uartdat[1])
{
case 1:
if(uartdat[2])TIMSK|=0X04;
else TIMSK&=~0X04;
break;
case 2:
if(uartdat[2]>0)
k1=uartdat[2]-1;
else k1=10;
break;
case 3:
if(uartdat[2]&&!zf)p=p-8,zf=1;
if(!uartdat[2]&&zf)p=p+8,zf=0;
break;
case 4:
if(uartdat[2]==1&&zf)p=bjdjdat;
if(uartdat[2]==1&&!zf)p=bjdjdat+8;
if(uartdat[2]==2&&zf)p=bjdjdat+16;
if(uartdat[2]==2&&!zf)p=bjdjdat+24;
if(uartdat[2]==3&&zf)p=bjdjdat+32;
if(uartdat[2]==3&&!zf)p=bjdjdat+40;
break;
}
for(j=0;j<4;j++)
{
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<
;
/* 将数据放入缓冲器,发送数据 */
UDR=uartdat[j];
}
}
void uartinit()//串行口初始化;
{
UCSRA=0X00;
UCSRB=0X98;
UCSRC=0X86;
UBRRH=0X00;
UBRRL=71;
SREG|=0X80;
}
#pragma interrupt_handler timer1:9
void timer1() //定时器1中断处理;
{
TCNT1=65536-timer1dat[k1];
i++;
if(i>7)i=0;
PORTD&=0X0F;
if(k1==10)return;
PORTD|=p[i];
}
void timer1init()
{
TCCR1A=0X00;
TCCR1B=0X02;
TIMSK|=0X04;
}
void main(void)//主程序;
{
p=bjdjdat;
uartinit();
ioinit();
timer1init();
while(1)
{
siansi(timer1dat[k1]%10,7,1000);
siansi(timer1dat[k1]%100/10,6,1000);
siansi(timer1dat[k1]%1000/100,5,1000);
siansi(timer1dat[k1]%10000/1000,4,1000);
siansi(timer1dat[k1]/10000,3,1000);
if(zf)siansi(14,2,1000);
else siansi(15,2,1000);
if(jslopen)jsl();
}
}
单片机输出脉冲的C语言简易程序,AVR单片机驱动二相步进电机(单极驱动)简易程序,带串口控制...相关推荐
- avr c语言编译器,AVR单片机C语言编译器-20210409071159.docx-原创力文档
鼓新资料推荐 鼓新资料推荐 炭新精詁资料整理推荐 炭新精詁资料整理推荐?更新"ZC二C毎十二月三十一口 2020年12月31 口星期0 19:24:59 鼓新资料推荐 鼓新资料推荐 炭新精詁 ...
- 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序
原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...
- ds18b20温度传感器 lcd C语言,基于AVR单片机的18B20温度传感器及LCD显示的C语言程序设计...
***************************************************/ #include #include #define uchar unsigned char # ...
- avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机控制8段LED数码管同时显示 - AVR单片机8位数码管显示的程序实现(两种方法介绍)...
AVR单片机控制8段LED数码管同时显示 这是一个简单的供单片机入门学习者练习用的8段LED数码管控制汇编程序,控制一个两位的数码管同时显示字符(动态刷新).用AVR- Studio-4 开发,在AV ...
- 单片机c语言 oxfe,AVR单片机入门及C语言高效设计实践(五)
ATMEAGl6L的中断系统什么是"中断"?顾名思义中断就是中断某一工作过程去处理一些与本工作过程无关或间接相关或临时发生的事件,处理完后,则继续原工作过程.比如:你在看书,电话响 ...
- 单片机包络检波c语言,基于AVR单片机的125kHz简易RFID阅读器设计.PDF
基于AVR单片机的125kHz简易RFID阅读器设计 基于AVR单片机的125 敖 华1,陈渊睿1'2,骆祖国1,李婷1 510640) (1.华南理工大学电力学院,广东广州510640:2.华南理工 ...
- avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
描述 本文为大家介绍两个AVR单片机8位数码管显示的程序实现. AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include > #include //GCC中的延时函数头文件 ...
- 单片机cant通讯 c语言,基于C8051F040单片机的CAN总线通信
硬件部分 硬件部分电路结构如下: CAN收发模块原本采用的是ATA6660高速CAN收发芯片,电路连接如下: 设计电路为:当单片机发送数据时,D18闪烁,并将数据传送给ATA6660芯片:当ATA66 ...
- 单片机技术与c语言编程教学大纲,单片机应用技术(C语言)教学大纲.doc
单片机应用技术(C语言)教学大纲 一.说明 1.课程的性质和内容 本课程是高级技校应用电子专业的专业课.主要内容包括:认识单片机,点亮彩灯,简易数字钟,简易计算器,键控彩灯,简易频率计,单片机双机通信 ...
最新文章
- stc51单片机怎么学, 先掌握STC单片机程序烧录方法
- 域名CNAME 概念
- HTTP.sys 远程执行代码验证工具
- ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
- 教你玩转CSS 分组选择器和嵌套选择器
- ubuntu 将某个目录下的文件复制到_Ubuntu系统简单美化
- Mac中安装NetBeans方法
- 解题报告 幸福的道路
- 特征提取算法 知乎_对话 | 港科大教授权龙:为什么三维重建才是计算机视觉的灵魂?...
- Atitit 效率提升法细则 v3 t028.docx Atitit 提升效率细则 目录 1. 目标 2 1.1. 配置化增加扩展性 尽可能消除编译 方便增加 调整业务逻辑 2 1.2. 统一接口
- ngrok技术原理及下载使用
- 从零开始学Java——基础篇
- 项目经理和技术主管的分工
- .db-shm和.db-wal文件
- java怎么使用sni,如何设置使用SNI提供两个SSL证书的Tomcat?
- 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)
- java mavlink_java – 使用消息更改速度到Mavlink
- windows通过安卓手机的【usb共享网络】上网突然无法上网的解决
- 想用自己电脑做服务器并且绑定域名建一个个人网站应该怎么做
- 人工神经元网络基本构成,人工神经网络主要有
热门文章
- 优秀手机应用设计需要遵循的8大原则
- java 考证资料_Java认证考试资料(ATA)
- 求长方形的面积和周长(Java)
- [论文素材]Background----CNN
- object-orientedprocedure-oriented
- 基于Qt5的图片浏览器QHImageViewer
- 计算机图形学【GAMES-101】1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)
- 使用Solidworks、ADAMS、Simulink进行机电联合仿真
- 金山Office飓风版如今到哪里去了?
- 大数据培训机构,主要都学习哪些课程?