⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 凌阳单片机步进电机代码DCMotor_Speed
💻 C
字号:
//======================================================
//  The information contained herein is the exclusive property of
//  Sunnnorth Technology Co. And shall not be distributed, reproduced,
//  or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2005  SUNNORTH TECHNOLOGY CO.
//                          ALL RIGHTS RESERVED
//  The entire notice above must be reproduced on all authorized copies.
//========================================================

//============================================================
//	工程名称:	DCM
//	功能描述:	直流电机测速程序示例,
//				示例程序实现功能:使电机接口1以47/64占空比发出正转信
//				号,测量电机转速,用数码管显示出来。
//				直流电机驱动函数用法参见"SPGT62C19B电机控制模组使用说明书.pdf"
//  涉及的库:	CMacro.lib
//	组成文件:	main.c
//				DCMotor.asm, Dig.asm
//				DCMotor.h, DCMotor.inc, Dig.h, Dig.inc
//	硬件连接:	模组J1 - 61板J8
//				模组J2 - 61板J9
//				模组J3 - 61板J6
//				直流电机插在模组的J11接口上
//				跳线跳至"DC MOTOR"端
//	完成日期:	2005-8-16
//============================================================

#include "DCMotor.h"							// 包含直流电机驱动头文件
#include "DIG.h"								// 包含数码管驱动头文件

#define CLR_WDT()	*(unsigned *)0x7012=1		// 清看门狗

//======================================================
// 函数名称:	DispNum
// 实现功能:	在4位数码管上显示整数
// 语法格式:	void DispNum(unsigned Num)
// 参数:		Num - 要显示的数值,范围0~9999
// 返回值:		无
//======================================================
const unsigned DigNum[]={						// 0~9十个数字对应的数码管显示编码
	0x3f,0x06,0x5b,0x4f,0x66,
	0x6d,0x7d,0x27,0x7f,0x6f
	};
void DispNum(unsigned Num)
{
	unsigned TempNum = Num, k;
	for(k=1;k<=4;k++)DIG_Set(k,0x00);			// 清除数码管显示
	if(Num>=1000)								// 千位
	{
		k = TempNum/1000;
		DIG_Set(1,DigNum[k]);
		TempNum = TempNum - k * 1000;
	}
	if(Num>=100)								// 百位
	{
		k = TempNum/100;
		DIG_Set(2,DigNum[k]);
		TempNum = TempNum - k * 100;
	}
	if(Num>=10)									// 十位
	{
		k = TempNum/10;
		DIG_Set(3,DigNum[k]);
		TempNum = TempNum - k * 10;
	}
	DIG_Set(4,DigNum[TempNum]);					// 个位
}

//======================================================
//	主函数
//======================================================
main()
{
	unsigned Speed_Pre=0,Speed_Cur=0;
	
	DCMotor_Init();								// 初始化直流电机驱动程序
	DIG_Init();									// 初始化数码管驱动程序
		
	DCMotor_SetSpeed(MOTOR_1,47);				// 将电机接口1的速度等级设置为47
	DCMotor_Forward(MOTOR_1);					// 向电机接口1发出正转信号
	
	DispNum(0);									// 数码管显示'0'
	while(1)
	{
		Speed_Cur = DCMotor_GetSpeed();			// 获取电机速度
		if(Speed_Cur!=Speed_Pre)				// 如果速度发生改变
		{
			Speed_Pre = Speed_Cur;				// 更新速度值
			DispNum(Speed_Cur);					// 显示新的速度值
		}
	}	
}


//======================================================
// 函数名称:	IRQ4
// 实现功能:	IRQ4_4KHz中断服务函数
// 语法格式:	void IRQ4(void)
// 参数:		无
// 返回值:		无
//======================================================
#define P_INT_Ctrl	(unsigned int*)0x7010		// 硬件端口定义
#define P_INT_Clear	(unsigned int*)0x7011		// 硬件端口定义
#define C_IRQ4_4KHz	0x0040						// 常数助记符定义

void IRQ4(void)__attribute__((ISR));			// 将IRQ4函数声明为中断服务函数

void IRQ4(void)									// IRQ4函数体
{
	if((*P_INT_Ctrl&C_IRQ4_4KHz)!=0x0000)		// 如果是4KHz中断
	{
		*P_INT_Clear = C_IRQ4_4KHz;				// 清中断标志位
		DCMotor_Drive();						// 调用直流电机驱动函数
		DIG_Drive();							// 调用数码管驱动函数
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -