📄 main.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 + -