打印
[通用8051核FLASH系列]

HC89S003F4单片机制作舵机测试仪diy(自娱自乐)

[复制链接]
1873|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 芯圣电子官方QQ 于 2023-7-25 14:24 编辑

      前几个月买了十个s90舵机,没有舵机测试仪,没有在淘宝买,打算自己制作一个,本着成功就好,不成拉倒的态度,就制作着看看,电路图没有参考,乱画的,也不知道有没有问题,
      电路图与pcb使用立创EDA在线版绘制,疫情期间,在公司没事干,上班摸鱼,画电路图与pcb。
//=====================================================================
//=========================舵机测试仪==================================
//=================MCU: HC89S003F4  2020-2-26==========================
//========================编程:荆棘鸟=================================
//=====================================================================

#define ALLOCATE_EXTERN
#include "HC89S003F4.h"
#define Uint unsigned int
#define Uchar unsigned char
        

//======================LED数码管GPIO设置==============================
sbit SMG_COM1 = P1^0;               //       ==========
sbit SMG_COM2 = P2^1;               //     ||          ||
sbit SMG_COM3 = P0^6;               //     ||          ||
sbit SMG_COM4 = P0^4;               //     ||          ||
sbit SMG_A = P2^7;                  //     ||          ||
sbit SMG_B = P0^7;                  //       ==========        
sbit SMG_C = P0^2;                  //     ||          ||
sbit SMG_D = P0^0;                  //     ||          ||
sbit SMG_E = P1^1;                  //     ||          ||
sbit SMG_F = P2^2;                  //     ||          ||
sbit SMG_G = P0^3;                  //       ==========
sbit SMG_DP = P0^1;                 //       LED 数码管

unsigned int gui_AdcValue = 0;                          //用于存放ADC的值



/*****************************************************************************************/
// * @说明          延时函数
// * @参数          fui_i : 延时时间
// * @返回值 无
// * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
/****************************************************************************************/

void Delay_2us(unsigned int fui_i)
{
        while(fui_i--);        
}

void Delay_ms(unsigned int i)
{
        unsigned int x,y;
        for(x=i;x>0;x--)
                for(y=610;y>0;y--);
}




/************************************系统初始化****************************************/
void SystemInit()
{
        WDTCCR = 0x00;                                                    //关闭看门狗
                                            //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
/************************************ADC初始化*****************************************/
        P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
        ADCC0 = 0x80;                                                  //打开ADC转换电源
        Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
        ADCC1 = 0x05;                                                  //选择外部通道1
        ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
        
}

/*********************************设置IO口模式*****************************************/
void GpioInit()
{
        /***************************************************************************************
                       * @实现效果        设置各个IO口的工作状态
  ***************************************************************************************/        
  /***********************************设置IO口模式***************************************/
            //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
            //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
            //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
            //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
            //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
            //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
            //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
            //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
            //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
            //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
           P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
           P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
           P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
           P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
           P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
           P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
           P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
           P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
           P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
           P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
           P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
           P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
                 //数码管COM端口初始化为高电平 不点亮
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 1;
}




void SMG_Array(unsigned char i)
{
                switch(i)
                {
                        case 0:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 1:
                                                  
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 2:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 3:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 4:
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 5:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 6:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 7:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 8:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                            break;
                        case 9:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 10:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                }
}

void SMG_Display(unsigned int i)
{
                 unsigned char Qian, Bai, Shi, Ge;
                 Qian = i/1000;
           Bai = i%1000/100;
           Shi = i%100/10;
           Ge = i%10;
           SMG_COM1 = 0;
                 SMG_COM2 = 1;
           SMG_COM3 = 1;
           SMG_COM4 = 1;
                 switch(Qian)
                 {
                         case 0:
                                        SMG_Array(Qian);
                      break;
                         case 1:
                                        SMG_Array(Qian);
                      break;
                         case 2:
                                        SMG_Array(Qian);
                      break;
                         case 3:
                                        SMG_Array(Qian);
                      break;
                         case 4:
                                        SMG_Array(Qian);
                      break;
                         case 5:
                                        SMG_Array(Qian);
                      break;
                         case 6:
                                        SMG_Array(Qian);
                      break;
                         case 7:
                                        SMG_Array(Qian);
                      break;
                         case 8:
                                        SMG_Array(Qian);
                      break;
                         case 9:
                                        SMG_Array(Qian);
                      break;
                 }
                SMG_COM1 = 1;
                SMG_COM2 = 0;
                SMG_COM3 = 1;
                SMG_COM4 = 1;
                switch(Bai)
                 {
                         case 0:
                                        SMG_Array(Bai);
                      break;
                         case 1:
                                        SMG_Array(Bai);
                      break;
                         case 2:
                                        SMG_Array(Bai);
                      break;
                         case 3:
                                        SMG_Array(Bai);
                      break;
                         case 4:
                                        SMG_Array(Bai);
                      break;
                         case 5:
                                        SMG_Array(Bai);
                      break;
                         case 6:
                                        SMG_Array(Bai);
                      break;
                         case 7:
                                        SMG_Array(Bai);
                      break;
                         case 8:
                                        SMG_Array(Bai);
                      break;
                         case 9:
                                        SMG_Array(Bai);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 0;
                 SMG_COM4 = 1;
                 switch(Shi)
                 {
                         case 0:
                                        SMG_Array(Shi);
                      break;
                         case 1:
                                        SMG_Array(Shi);
                      break;
                         case 2:
                                        SMG_Array(Shi);
                      break;
                         case 3:
                                        SMG_Array(Shi);
                      break;
                         case 4:
                                        SMG_Array(Shi);
                      break;
                         case 5:
                                        SMG_Array(Shi);
                      break;
                         case 6:
                                        SMG_Array(Shi);
                      break;
                         case 7:
                                        SMG_Array(Shi);
                      break;
                         case 8:
                                        SMG_Array(Shi);
                      break;
                         case 9:
                                        SMG_Array(Shi);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 0;
                 switch(Ge)
                 {
                         case 0:
                                        SMG_Array(Ge);
                      break;
                         case 1:
                                        SMG_Array(Ge);
                      break;
                         case 2:
                                        SMG_Array(Ge);
                      break;
                         case 3:
                                        SMG_Array(Ge);
                      break;
                         case 4:
                                        SMG_Array(Ge);
                      break;
                         case 5:
                                        SMG_Array(Ge);
                      break;
                         case 6:
                                        SMG_Array(Ge);
                      break;
                         case 7:
                                        SMG_Array(Ge);
                      break;
                         case 8:
                                        SMG_Array(Ge);
                      break;
                         case 9:
                                        SMG_Array(Ge);
                      break;
                 }
}

/*********************************主程序*************************************************/
void main()
{
    SystemInit();        
          GpioInit();
          while(1)
          {
                        ADCC0 |= 0x40;                                        //启动ADC转换
                        while(!(ADCC0&0x20));                //等待ADC转换结束
                        ADCC0 &=~ 0x20;                                        //清除标志位
                        gui_AdcValue = ADCR;                 //获取ADC的值
                  SMG_Display(gui_AdcValue=(gui_AdcValue+819)/1.6375);
          };
}
pcb上面的的引脚由于布线方便导致与电路图不一样,程序也写的跟狗屎一样,大家都这样说,没有办法,就这点水平了。

使用特权

评论回复
沙发
yygdzjs| | 2020-2-29 18:55 | 只看该作者
不错,谢谢分享!

使用特权

评论回复
板凳
law3411209|  楼主 | 2020-3-2 15:27 | 只看该作者
   粗心大意了,PWM_OUT引脚没有引出,也没有布线,pcb上面的PWM_OUT插针无信号输出。由于led数码管已经占用单片机大部分引脚,只能把数码管的SMG_DP小数点去掉,在pcb上面用刀片划开,飞线到插针与单片机引脚相连,PWM_OUTa输出印射P0^1引脚。
//====================================================================
//=========================舵机测试仪==================================
//=================MCU: HC89S003F4  2020-2-26==========================
//========================编程:荆棘鸟=================================
//=====================================================================

#define ALLOCATE_EXTERN
#include "HC89S003F4.h"
#define Uint unsigned int
#define Uchar unsigned char
       

//======================LED数码管GPIO设置==============================
sbit SMG_COM1 = P1^0;               //       ==========
sbit SMG_COM2 = P2^1;               //     ||          ||
sbit SMG_COM3 = P0^6;               //     ||          ||
sbit SMG_COM4 = P0^4;               //     ||          ||
sbit SMG_A = P2^7;                  //     ||          ||
sbit SMG_B = P0^7;                  //       ==========        
sbit SMG_C = P0^2;                  //     ||          ||
sbit SMG_D = P0^0;                  //     ||          ||
sbit SMG_E = P1^1;                  //     ||          ||
sbit SMG_F = P2^2;                  //     ||          ||
sbit SMG_G = P0^3;                  //       ==========

//sbit SMG_DP = P0^1;   

unsigned int gui_AdcValue = 0;                          //用于存放ADC的值



/*****************************************************************************************/
// * @说明          延时函数
// * @参数          fui_i : 延时时间
// * @返回值 无
// * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
/****************************************************************************************/

void Delay_2us(unsigned int fui_i)
{
        while(fui_i--);       
}

void Delay_ms(unsigned int i)
{
        unsigned int x,y;
        for(x=i;x>0;x--)
                for(y=610;y>0;y--);
}




/************************************系统初始化****************************************/
void SystemInit()
{
        WDTCCR = 0x00;                                                    //关闭看门狗
                                            //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
/************************************ADC初始化*****************************************/
        P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
        ADCC0 = 0x80;                                                  //打开ADC转换电源
        Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
        ADCC1 = 0x05;                                                  //选择外部通道1
        ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
       
        PWM0_MAP = 0x01;                                        //PWM0通道映射P01口
  PWM0C = 0x01;                                            //PWM0高有效,PWM01高有效,时钟8分频

        //独立模式下,PWM0和PWM01共用一个周期寄存器
        //PWM0的占空比调节使用                        PWM0组的占空比寄存器
        //PWM01的占空比调节使用                        PWM0组的死区寄存器

        //周期计算         = 0x9C4O / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
        //                            = 0x9C40 / (16000000 / 8)                       
        //                             = 40000   /2000000
        //                            = 200000   50Hz

        PWM0PH = 0x9C;                                                //周期高4位设置为0x9C
        PWM0PL = 0x40;                                                //周期低8位设置为0x40
             PWM0EN = 0x0F;                                                //使能PWM0,工作于独立模式
       
}

/*********************************设置IO口模式*****************************************/
void GpioInit()
{
        /***************************************************************************************
                       * @实现效果        设置各个IO口的工作状态
  ***************************************************************************************/       
  /***********************************设置IO口模式***************************************/
            //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
            //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
            //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
            //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
            //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
            //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
            //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
            //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
            //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
            //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
           P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
           P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
           P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
           P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
           P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
           P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
           P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
          // P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
           P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
           P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
           P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
           P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
                 P0M0 = P0M0&0x0F|0x80;  // PWM_OUT     推挽输出
                 
                 //数码管COM端口初始化为高电平 不点亮
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 1;
}




void SMG_Array(unsigned char i)
{
                switch(i)
                {
                        case 0:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 1:
                                                 
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 2:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 3:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 4:
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 5:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 6:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 7:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 8:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                            break;
                        case 9:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 10:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                }
}

void SMG_Display(unsigned int i)
{
                 unsigned char Qian, Bai, Shi, Ge;
                 Qian = i/1000;
           Bai = i%1000/100;
           Shi = i%100/10;
           Ge = i%10;
           SMG_COM1 = 0;
                 SMG_COM2 = 1;
           SMG_COM3 = 1;
           SMG_COM4 = 1;
                 switch(Qian)
                 {
                         case 0:
                                        SMG_Array(Qian);
                      break;
                         case 1:
                                        SMG_Array(Qian);
                      break;
                         case 2:
                                        SMG_Array(Qian);
                      break;
                         case 3:
                                        SMG_Array(Qian);
                      break;
                         case 4:
                                        SMG_Array(Qian);
                      break;
                         case 5:
                                        SMG_Array(Qian);
                      break;
                         case 6:
                                        SMG_Array(Qian);
                      break;
                         case 7:
                                        SMG_Array(Qian);
                      break;
                         case 8:
                                        SMG_Array(Qian);
                      break;
                         case 9:
                                        SMG_Array(Qian);
                      break;
                 }
                SMG_COM1 = 1;
                SMG_COM2 = 0;
                SMG_COM3 = 1;
                SMG_COM4 = 1;
                switch(Bai)
                 {
                         case 0:
                                        SMG_Array(Bai);
                      break;
                         case 1:
                                        SMG_Array(Bai);
                      break;
                         case 2:
                                        SMG_Array(Bai);
                      break;
                         case 3:
                                        SMG_Array(Bai);
                      break;
                         case 4:
                                        SMG_Array(Bai);
                      break;
                         case 5:
                                        SMG_Array(Bai);
                      break;
                         case 6:
                                        SMG_Array(Bai);
                      break;
                         case 7:
                                        SMG_Array(Bai);
                      break;
                         case 8:
                                        SMG_Array(Bai);
                      break;
                         case 9:
                                        SMG_Array(Bai);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 0;
                 SMG_COM4 = 1;
                 switch(Shi)
                 {
                         case 0:
                                        SMG_Array(Shi);
                      break;
                         case 1:
                                        SMG_Array(Shi);
                      break;
                         case 2:
                                        SMG_Array(Shi);
                      break;
                         case 3:
                                        SMG_Array(Shi);
                      break;
                         case 4:
                                        SMG_Array(Shi);
                      break;
                         case 5:
                                        SMG_Array(Shi);
                      break;
                         case 6:
                                        SMG_Array(Shi);
                      break;
                         case 7:
                                        SMG_Array(Shi);
                      break;
                         case 8:
                                        SMG_Array(Shi);
                      break;
                         case 9:
                                        SMG_Array(Shi);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 0;
                 switch(Ge)
                 {
                         case 0:
                                        SMG_Array(Ge);
                      break;
                         case 1:
                                        SMG_Array(Ge);
                      break;
                         case 2:
                                        SMG_Array(Ge);
                      break;
                         case 3:
                                        SMG_Array(Ge);
                      break;
                         case 4:
                                        SMG_Array(Ge);
                      break;
                         case 5:
                                        SMG_Array(Ge);
                      break;
                         case 6:
                                        SMG_Array(Ge);
                      break;
                         case 7:
                                        SMG_Array(Ge);
                      break;
                         case 8:
                                        SMG_Array(Ge);
                      break;
                         case 9:
                                        SMG_Array(Ge);
                      break;
                 }
}

/*********************************主程序*************************************************/
void main()
{
    SystemInit();       
          GpioInit();
          while(1)
          {
                        ADCC0 |= 0x40;                                        //启动ADC转换
                        while(!(ADCC0&0x20));                //等待ADC转换结束
                        ADCC0 &=~ 0x20;                                        //清除标志位
                        gui_AdcValue = ADCR;                 //获取ADC的值
                  SMG_Display(gui_AdcValue=(gui_AdcValue+819)/1.6375);
                        //占空比计算= 0x0FA0 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
            //                                        = 0x0155 / (16000000 / 8)                       
            //                                         = 4000          / 2000000
            //                                        = 2000us                   占空比为 2000/200000 = 1%

            PWM0DH = gui_AdcValue>>8;                                                //PWM0高4位占空比0x0F
            PWM0DL = gui_AdcValue;                                                //PWM0低8位占空比0xA0
            
          };
}
程序依旧还是狗屎一样烂,大部分代码引用于官方例程。

使用特权

评论回复
地板
kkzz| | 2020-3-3 22:18 | 只看该作者
没有演示视频吗         

使用特权

评论回复
5
hudi008| | 2020-3-3 22:18 | 只看该作者
看着还不错的资料。      

使用特权

评论回复
6
lzmm| | 2020-3-3 22:18 | 只看该作者
舵机测试仪?      

使用特权

评论回复
7
minzisc| | 2020-3-3 22:19 | 只看该作者
是用来显示角度的吗   

使用特权

评论回复
8
selongli| | 2020-3-3 22:19 | 只看该作者
电路图与pcb有吗      

使用特权

评论回复
9
fentianyou| | 2020-3-3 22:19 | 只看该作者
看着还是不错呢。            

使用特权

评论回复
10
xiaoyaodz| | 2020-3-3 22:19 | 只看该作者
给楼主点赞了。        

使用特权

评论回复
11
febgxu| | 2020-3-3 22:19 | 只看该作者
               

使用特权

评论回复
12
sdlls| | 2020-3-3 22:20 | 只看该作者
舵机测试仪有什么用呢   

使用特权

评论回复
13
pixhw| | 2020-3-3 22:20 | 只看该作者
以前使用stm32在控制过电机  

使用特权

评论回复
14
law3411209|  楼主 | 2020-3-5 08:53 | 只看该作者
本帖最后由 law3411209 于 2020-3-7 09:10 编辑

程序有改动,这是演示视频https://www.bilibili.com/video/av93579356/

使用特权

评论回复
15
jiaisr123| | 2020-3-6 17:36 | 只看该作者
赞一个

使用特权

评论回复
16
law3411209|  楼主 | 2020-3-7 10:07 | 只看该作者
//====================================================================
//=========================舵机测试仪==================================
//=================MCU: HC89S003F4  2020-2-26==========================
//========================编程:荆棘鸟=================================
//=====================================================================

#define ALLOCATE_EXTERN
#include "HC89S003F4.h"
#define Uint unsigned int
#define Uchar unsigned char
       

//======================LED数码管GPIO设置==============================
sbit SMG_COM1 = P1^0;               //       ==========
sbit SMG_COM2 = P2^1;               //     ||          ||
sbit SMG_COM3 = P0^6;               //     ||          ||
sbit SMG_COM4 = P0^4;               //     ||          ||
sbit SMG_A = P2^7;                  //     ||          ||
sbit SMG_B = P0^7;                  //       ==========        
sbit SMG_C = P0^2;                  //     ||          ||
sbit SMG_D = P0^0;                  //     ||          ||
sbit SMG_E = P1^1;                  //     ||          ||
sbit SMG_F = P2^2;                  //     ||          ||
sbit SMG_G = P0^3;                  //       ==========

//sbit SMG_DP = P0^1;   

unsigned int gui_AdcValue = 0;                          //用于存放ADC的值
unsigned int gui_AdcValue1 = 0;       //用于存放数显的值
unsigned int gui_AdcValue2 = 0;       //用于存放占空比的值

/*****************************************************************************************/
// * @说明          延时函数
// * @参数          fui_i : 延时时间
// * @返回值 无
// * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
/****************************************************************************************/

void Delay_2us(unsigned int fui_i)
{
        while(fui_i--);       
}

void Delay_ms(unsigned int i)
{
        unsigned int x,y;
        for(x=i;x>0;x--)
                for(y=610;y>0;y--);
}




/************************************系统初始化****************************************/
void SystemInit()
{
        WDTCCR = 0x00;                                                    //关闭看门狗
                                            //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
/************************************ADC初始化*****************************************/
        P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
        ADCC0 = 0x80;                                                  //打开ADC转换电源
        Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
        ADCC1 = 0x05;                                                  //选择外部通道1
        ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
       
        PWM0_MAP = 0x01;                                        //PWM0通道映射P01口
  PWM0C = 0x03;                                            //PWM0高有效,PWM01高有效,时钟8分频

        //独立模式下,PWM0和PWM01共用一个周期寄存器
        //PWM0的占空比调节使用                        PWM0组的占空比寄存器
        //PWM01的占空比调节使用                        PWM0组的死区寄存器

        //周期计算         = 0x9C4O / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
        //                            = 0x9C40 / (16000000 / 8)                       
        //                             = 40000   /2000000
        //                            = 200000   50Hz

        PWM0PH = 0x9C;                                                //周期高4位设置为0x9C
        PWM0PL = 0x40;                                                //周期低8位设置为0x40
  PWM0EN = 0x0F;                                                //使能PWM0,工作于独立模式
       
}

/*********************************设置IO口模式*****************************************/
void GpioInit()
{
        /***************************************************************************************
                       * @实现效果        设置各个IO口的工作状态
  ***************************************************************************************/       
  /***********************************设置IO口模式***************************************/
            //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
            //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
            //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
            //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
            //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
            //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
            //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
            //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
            //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
            //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
           P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
           P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
           P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
           P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
           P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
           P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
           P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
          // P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
           P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
           P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
           P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
           P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
                 P0M0 = P0M0&0x0F|0x80;  // PWM_OUT     推挽输出
                 
                 //数码管COM端口初始化为高电平 不点亮
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 1;
}




void SMG_Array(unsigned char i)
{
                switch(i)
                {
                        case 0:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 1:
                                                 
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 2:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 3:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 4:
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            break;
                        case 5:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 6:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                                        break;
                        case 7:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                                        break;
                        case 8:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        SMG_G = 1;
                            Delay_2us(100);
                            SMG_G= 0;
                                        Delay_2us(100);
                            break;
                        case 9:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_G = 1;
                            Delay_2us(100);
                            SMG_G = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                        case 10:
                                  SMG_A = 1;
                            Delay_2us(100);
                            SMG_A = 0;
                                        Delay_2us(100);
                            SMG_B = 1;
                            Delay_2us(100);
                            SMG_B = 0;
                                        Delay_2us(100);
                            SMG_C = 1;
                            Delay_2us(100);
                            SMG_C = 0;
                                        Delay_2us(100);
                            SMG_D = 1;
                            Delay_2us(100);
                            SMG_D = 0;
                                        Delay_2us(100);
                            SMG_E = 1;
                            Delay_2us(100);
                            SMG_E = 0;
                                        Delay_2us(100);
                            SMG_F = 1;
                            Delay_2us(100);
                            SMG_F= 0;
                                        Delay_2us(100);
                                        break;
                }
}

void SMG_Display(unsigned int i)
{
                 unsigned char Qian, Bai, Shi, Ge;
                 Qian = i/1000;
           Bai = i%1000/100;
           Shi = i%100/10;
           Ge = i%10;
           SMG_COM1 = 0;
                 SMG_COM2 = 1;
           SMG_COM3 = 1;
           SMG_COM4 = 1;
                 switch(Qian)
                 {
                         case 0:
                                        SMG_Array(Qian);
                      break;
                         case 1:
                                        SMG_Array(Qian);
                      break;
                         case 2:
                                        SMG_Array(Qian);
                      break;
                         case 3:
                                        SMG_Array(Qian);
                      break;
                         case 4:
                                        SMG_Array(Qian);
                      break;
                         case 5:
                                        SMG_Array(Qian);
                      break;
                         case 6:
                                        SMG_Array(Qian);
                      break;
                         case 7:
                                        SMG_Array(Qian);
                      break;
                         case 8:
                                        SMG_Array(Qian);
                      break;
                         case 9:
                                        SMG_Array(Qian);
                      break;
                 }
                SMG_COM1 = 1;
                SMG_COM2 = 0;
                SMG_COM3 = 1;
                SMG_COM4 = 1;
                switch(Bai)
                 {
                         case 0:
                                        SMG_Array(Bai);
                      break;
                         case 1:
                                        SMG_Array(Bai);
                      break;
                         case 2:
                                        SMG_Array(Bai);
                      break;
                         case 3:
                                        SMG_Array(Bai);
                      break;
                         case 4:
                                        SMG_Array(Bai);
                      break;
                         case 5:
                                        SMG_Array(Bai);
                      break;
                         case 6:
                                        SMG_Array(Bai);
                      break;
                         case 7:
                                        SMG_Array(Bai);
                      break;
                         case 8:
                                        SMG_Array(Bai);
                      break;
                         case 9:
                                        SMG_Array(Bai);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 0;
                 SMG_COM4 = 1;
                 switch(Shi)
                 {
                         case 0:
                                        SMG_Array(Shi);
                      break;
                         case 1:
                                        SMG_Array(Shi);
                      break;
                         case 2:
                                        SMG_Array(Shi);
                      break;
                         case 3:
                                        SMG_Array(Shi);
                      break;
                         case 4:
                                        SMG_Array(Shi);
                      break;
                         case 5:
                                        SMG_Array(Shi);
                      break;
                         case 6:
                                        SMG_Array(Shi);
                      break;
                         case 7:
                                        SMG_Array(Shi);
                      break;
                         case 8:
                                        SMG_Array(Shi);
                      break;
                         case 9:
                                        SMG_Array(Shi);
                      break;
                 }
                 SMG_COM1 = 1;
                 SMG_COM2 = 1;
                 SMG_COM3 = 1;
                 SMG_COM4 = 0;
                 switch(Ge)
                 {
                         case 0:
                                        SMG_Array(Ge);
                      break;
                         case 1:
                                        SMG_Array(Ge);
                      break;
                         case 2:
                                        SMG_Array(Ge);
                      break;
                         case 3:
                                        SMG_Array(Ge);
                      break;
                         case 4:
                                        SMG_Array(Ge);
                      break;
                         case 5:
                                        SMG_Array(Ge);
                      break;
                         case 6:
                                        SMG_Array(Ge);
                      break;
                         case 7:
                                        SMG_Array(Ge);
                      break;
                         case 8:
                                        SMG_Array(Ge);
                      break;
                         case 9:
                                        SMG_Array(Ge);
                      break;
                 }
}

/*********************************主程序*************************************************/
void main()
{
    SystemInit();       
          GpioInit();
          while(1)
          {
                        ADCC0 |= 0x40;                                        //启动ADC转换
                        while(!(ADCC0&0x20));                //等待ADC转换结束
                        ADCC0 &=~ 0x20;                                        //清除标志位
                        gui_AdcValue = ADCR;                 //获取ADC的值
                       
                        if(gui_AdcValue1>820)
                        {
                                                        //ADC值最大4096 显示值最大2500 4096/2500=1.6384
                                                        //数码管显示值在500——2500之间
                         SMG_Display(gui_AdcValue1=gui_AdcValue/1.6384);  
                               
                                  //占空比计算= 0x0FA0 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
                      //                                        = 0x0155 / (16000000 / 128)                       
                      //                                         = 312          / 125000
                      //                                        = 2500us                   占空比为 2000/200000 = 1%
                               
                                                //2500us 占空比计算值=312 4096/312=13.128
                                                //   如:我需要2000us
                                                //                         通过↑公式计算 占空比计算值=250  实际ADC值=250乘以13.128=3282
                               
                                                gui_AdcValue2=gui_AdcValue/13.128;
                                    PWM0DH = gui_AdcValue2>>8;                                                //PWM0高4位占空比0x0F
                  PWM0DL = gui_AdcValue2;                                                //PWM0低8位占空比0xA0
      }
                        else    //ADC值小于820, 820/1.6384=500 数码管直接锁定显示500
                        {
                                                SMG_Display(gui_AdcValue1=820);
                        }
            
            
          };
}


       
2020-03-7 :程序修改

使用特权

评论回复
17
wangshujun| | 2020-3-24 12:18 | 只看该作者
pcb布线便利带来的软件麻烦不是一般大呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

56

帖子

0

粉丝