张旭文 发表于 2024-7-29 21:46:41

寻求冲哥视频内的代码

本帖最后由 张旭文 于 2024-7-29 21:59 编辑

学习冲哥视频 《STC32位8051单片机原理及应用》

仿照冲哥视频写的代码自己编译不通过,想下载代码对比错误出在哪里了

soma 发表于 2024-7-29 22:10:06

本帖最后由 soma 于 2024-7-29 22:15 编辑

#include "COMM/stc.h"                //调用头文件
#include "COMM/usb.h"

#define KEY1 P32                //定义一个按键 引脚选择P32
#define KEY2 P33                //定义一个按键 引脚选择P33

#define BEEP P54                //定义一个按键 引脚选择P54

#define MAIN_Fosc 24000000UL        //定义主时钟

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
       
u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };        //0-9

void sys_init();        //函数声明
void delay_ms(u16 ms);        //unsigned int

void main()                                        //程序开始运行的入口
{
        u8 num = 0;
        sys_init();                                //USB功能+IO口初始化
        usb_init();                                //usb库初始化
        EA = 1;                                        //CPU开放中断,打开总中断。
       
        while(1)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();

                }
                P70 = 0;                        //开启一个数码管
//------------------------------------------------P32按下一次,灯往右边边移动一个单位        -----------------------------------------------               
//                P6 = SEG_Tab;        //这个数码管输出段码
//                num ++;
//                if( num>9 )
//                        num = 0;
//               
//                delay_ms(1000);
               
                P6 = SEG_Tab;        //这个数码管输出段码

                if( KEY1 ==0 )
                {
                        delay_ms(10);
                        if( KEY1 ==0 )
                        {
                                BEEP = 0;
                                delay_ms(10);
                                BEEP = 1;
                                while( KEY1 ==0 );
                                if( num<9 )
                                {
                                        num++;
                                }
                        }
                }
                if( KEY2 ==0 )
                {
                        delay_ms(10);
                        if( KEY2 ==0 )
                        {
                                BEEP = 0;
                                delay_ms(10);
                                BEEP = 1;                               
                                while( KEY2 ==0 );
                                if( num>0 )
                                        num--;
                        }
                }               
               
        }
}
/*
11111110 0XFE
11111101 0XFD
11111011 0XFB
11110111 0XF7
11101111 0XEF
11011111 0XDF
10111111 0XBF
01111111 0X7F
*/

void sys_init()                //函数定义
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
       
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //设置USB使用的时钟源
    IRC48MCR = 0x80;    //使能内部48M高速IRC
    while (!(IRC48MCR & 0x01));//等待时钟稳定

    USBCLK = 0x00;        //使用CDC功能需要使用这两行,HID功能禁用这两行。
    USBCON = 0x90;
}


void delay_ms(u16 ms)        //unsigned int
{
        u16 i;
        do
        {
                i = MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}

你的程序不全,且char*USER DEVICEDESC = NULL;少下划线应该是char*USER_DEVICEDESC = NULL;还有很多缺少下划线如定义和函数部分。

张旭文 发表于 2024-7-29 22:33:26

谢谢

张旭文 发表于 2024-7-29 22:37:25

本帖最后由 张旭文 于 2024-7-29 22:40 编辑

//#include <STC32G.H>
#include "COMM/stc.h"    //调用头文件
#include "COMM/usb.h"

#define KEY1 P32                //定义一个按键 引脚选择P32
#define KEY2 P33                //定义一个按键 引脚选择P33
#define BEEP P54                //定义一个按键 引脚选择P54


#define MAIN_Fosc 24000000UL                //定义主时钟

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD ="@STCISP#";

u8 SEG_Tab= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };                //0-9

void sys_init();                        //函数声明
void delay_ms(u16 ms);      //unsigned int

void main()
{
      u8 num = 0;                //程序开始运行的入口
      sys_init();                //USB功能+I0口初始化
      usb_init();                //usb库初始化
      EA = 1;                        //CPT开放中断,打开总中断。
      
      while(1)                //死循环
      {
                        if( DeviceState != DEVSTATE_CONFIGURED)
                              continue ;
                if( bUsbOutReady )
                {
                        usb_OUT_done();
               
                }
                        P70 = 0;                //开启一个数码管
//---------------------------------P32按下一次,灯往右边边移动一个单位------------------------
//                P6=SEG Tab:                //这个数码管输出段码
//                num ++ ;
//                if(num>9)
//                num=0;
//
//                delay_ms(1000);
                        
                        P6 = SEG_Tab;                //这个数码管输出段码
         
                if ( KEY1 ==0 )
                        {
                              //delay_ms(10);
                              delay_ms(10);
                        //      if( KEY1 ==0)
                              if( KEY1 ==0 )
                                        {
                                                
                                                BEEP = 0;
                                                delay_ms(10);
                                                BEEP = 1;
                                                while( KEY1 ==0 );
                                                if( num<9)
                                                      {
                                                                num++;
                                                      }
                                       }
                         }
                        if( KEY2 ==0 )
                              {
                                        delay_ms(10);
                                        if(KEY2 ==0 )
                                                {
                                                      BEEP = 0;
                                                      delay_ms(10);
                                                      BEEP = 1;
                                                      while( KEY2 ==0);
                                                      if( num>0 )
                                                                num--;
                                                }
                              }
                }
}      

void sys_init()                //函数定义
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

      P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
      
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //设置USB使用的时钟源
    IRC48MCR = 0x80;    //使能内部48M高速IRC
    while (!(IRC48MCR & 0x01));//等待时钟稳定

    USBCLK = 0x00;      //使用CDC功能需要使用这两行,HID功能禁用这两行。
    USBCON = 0x90;
}


void delay_ms(u16 ms)      //unsigned int
{
      u16 i;
      do
      {
                i = MAIN_Fosc/6000;
                while(--i);
      }while(--ms);
}



代码修改过来后我的还是有32个警告。

soma 发表于 2024-7-29 23:14:18

张旭文 发表于 2024-7-29 22:37
代码修改过来后我的还是有32个警告。

这个是使用库函数的问题L57,由于这些函数未使用编译器警告而已,不用管他,如果flash占用不是很大忽略,如果感觉flash不够,在OPTION for target 里面的L251 Misc里面的misc control里面输入REMOVEUNUSED,就可以了。也可disable Warming number 输入57屏蔽警告

张旭文 发表于 2024-7-29 23:33:00

soma 发表于 2024-7-29 23:14
这个是使用库函数的问题L57,由于这些函数未使用编译器警告而已,不用管他,如果flash占用不是很大忽略, ...

谢谢

zhange 发表于 2024-7-30 12:05:29

他视频地下讲就有吧{:4_168:}{:4_168:}

vb2002 发表于 2024-7-30 19:21:07

冲哥那个帖子里面有,
我已经下载保存了.
如果找不到的话,联系我,我发给你

张旭文 发表于 2024-7-30 19:47:09

zhange 发表于 2024-7-30 12:05
他视频地下讲就有吧

已下载谢谢

张旭文 发表于 2024-7-30 19:47:37

vb2002 发表于 2024-7-30 19:21
冲哥那个帖子里面有,
我已经下载保存了.
如果找不到的话,联系我,我发给你 ...

已下载 非常感谢
页: [1]
查看完整版本: 寻求冲哥视频内的代码