找回密码
 立即注册
楼主: 电子DIY小家

冲哥32位8051视频教程疑问解答贴

 火.. [复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:128
  • 最近打卡:2025-10-16 08:23:40
已绑定手机

2

主题

64

回帖

631

积分

高级会员

积分
631
发表于 2025-6-24 21:36:42 | 显示全部楼层

/*
        MAIN_Fosc  24000000Hz
*/
#include <AI8051U.H>
#include "stc32_stc8_usb.h"
#include <intrins.H>

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

unsigned char ucLed=0xFE;
unsigned char ucLed_Mode;//流水灯模式
unsigned char ucLed_Buff[]={0x7E,0xBD,0xDB,0xE7};

/*---Xms延时函数 ---*/
void DelayXms(unsigned int Xms)        //@24.000MHz
{
        unsigned long edata i;
        while(Xms--)
        {
                _nop_();
                _nop_();
                _nop_();
                i = 5998UL;
                while (i) i--;
        }
}
/*---LED流水灯处理函数 ---*/
void ucLed_Proc()
{
        static unsigned char i=0;
        P2 = ucLed;
        switch(ucLed_Mode)
        {
                case 0:
                        if(ucLed==0x7E)
                        {
                                ucLed = 0xFE;
                        }
                        else
                        ucLed = _crol_(ucLed,1);
                        DelayXms(500);
                        if(ucLed==0x7F)ucLed_Mode=1;
                break;
                case 1:
                        ucLed = _cror_(ucLed,1);
                        DelayXms(500);
                        if(ucLed==0xFE)ucLed_Mode=2;
                break;
                case 2:                                       
                                ucLed=ucLed_Buff[i];
                                i++;
                                if(i==3)ucLed_Mode=3;
                       
                        DelayXms(500);
                break;
                case 3:
                       
                        ucLed=ucLed_Buff[i];
                        i--;
                        if(i==255)ucLed_Mode=0;
                        DelayXms(500);
                break;
        }
        P2=0xFF;
}
/*---MAIN 主函数 ---*/
void main()
{
        P_SW2 |= 0x80;                //B7位写1,使能访问XFR       
                                                                       
        P0M1 = 0x00;   P0M0 = 0x00;        //初始化IO口为准双向IO口
    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;
       
        usb_init();                                     //USB CDC 接口配置
    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;开总中断
               
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
               
        while(1)
        {
                if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }
                ucLed_Proc();
        }
}
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:128
  • 最近打卡:2025-10-16 08:23:40
已绑定手机

2

主题

64

回帖

631

积分

高级会员

积分
631
发表于 2025-7-2 23:18:00 | 显示全部楼层
冲哥辛苦了,我想问一下第9 课数码管中的HC595驱动函数中的 "CY"是在什么地方定义的.这里有的弄不明白.


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-10 16:43:39
已绑定手机

0

主题

4

回帖

18

积分

新手上路

积分
18
发表于 2025-7-10 16:44:18 | 显示全部楼层
感谢孜孜不倦的教学
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:67
  • 最近打卡:2025-10-09 11:38:02
已绑定手机

4

主题

192

回帖

582

积分

高级会员

积分
582
发表于 2025-7-31 19:42:09 | 显示全部楼层
能不能封装一下usb的更多功能  ,usbhub, usbhid设备等
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-09-11 16:54:41
已绑定手机

0

主题

2

回帖

12

积分

新手上路

积分
12
发表于 2025-9-10 16:54:31 | 显示全部楼层
果然高端,受益匪浅,感谢大佬
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-10-15 15:37:36
已绑定手机

2

主题

271

回帖

782

积分

高级会员

积分
782
发表于 2025-9-15 21:06:09 | 显示全部楼层
请教一个掉电保存数据的问题:


我仔细的学习了冲哥的22讲比较器,也认真跟着冲哥把源程序写好了,经过下载实验,发现用降低电压(调整电位器W1)

可以顺利的保存按键次数数据,但是如果关电源(按Power-SW)或者把连接PC的电缆把掉,数据就无法保存

初步怀疑是电容太小,马上把240uf的电容换了个3300uf的,结果没用

接着把STC公司的AI8051U的相关里例程 22号   22-使用比较器检测外部稳压管输入前端,掉电时及时保存数据到EEPROM

下载后发现是可以保存秒数据的,无论是关电源(按Power-SW)或者把连接PC的电缆把掉,数据都正常保存。

我就开始乱怀疑,也按照STC公司的例程 22号,把秒时间改成按键次数,结果和冲哥的例程一样,只能调整电位器W1降低电压的时候

可以正常保存,就有点懵,我把源程序都作为附件,看看哪位大侠有时间,帮手看看?

实验环境是STC的AI8051U试验箱,32位模式


冲哥按键掉电保存.zip

281.64 KB, 下载次数: 7

掉电存数据.zip

56.69 KB, 下载次数: 10

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2025-10-16 08:28:52

1

主题

6

回帖

655

积分

高级会员

积分
655
发表于 2025-9-18 08:10:12 | 显示全部楼层
ZIJIN*** 发表于 2025-7-2 23:18
冲哥辛苦了,我想问一下第9 课数码管中的HC595驱动函数中的 "CY"是在什么地方定义的.这里有的弄不明白.

sbit        CY          =           PSW^7;
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-10-15 15:37:36
已绑定手机

2

主题

271

回帖

782

积分

高级会员

积分
782
发表于 2025-10-3 11:56:46 | 显示全部楼层
要小结一下!

    从上个月开始重新学习冲哥的32位8051视频教程,今天看到21集:

第二十一集:串口应用上 昨晚把很久没有使用的一箭双雕小板也找出来了

还好,一切顺利:

把冲哥的例程改了一点:多点亮几个数码管和LED灯...............

本来还想把温度读出来,结果下载运行后没反应,好像整个程序都跑飞啦?

暂时不管按“D” 的温度显示啦!




串口与PC通信-01.zip

281.58 KB, 下载次数: 5

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-10-15 15:37:36
已绑定手机

2

主题

271

回帖

782

积分

高级会员

积分
782
发表于 2025-10-4 12:22:46 | 显示全部楼层
今天学习了冲个的《STC32G单片机视频教程》第二十一集:串口应用上  和  第二十一集:串口应用下


小改了一下,把温度的测量值带进去,真实一点点:

  1. void main()                                        //程序开始运行的入口
  2. {
  3.         char str[30];
  4.         int temp=0;
  5.         float Temp_xs=0;
  6.         sys_init();                                //USB功能+IO口初始化
  7.         UART2_config(2);    // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
  8.        
  9.         usb_init();                //usb库初始化
  10.         delay_ms(500);
  11.         Timer0_Init();        //定时器0初始化
  12.        
  13.         ADC_Init();       
  14.        
  15.         P1M0 = 0x00; P1M1 = 0x08;
  16.        
  17.         EA = 1;                                        //CPU开放中断,打开总中断。
  18.         PrintString2("STC32G UART2 Test Programme!\r\n");  //UART2发送一个字符串
  19.         while(1)                //死循环
  20.         {
  21.                 delay_ms(2);
  22.                 if( DeviceState != DEVSTATE_CONFIGURED )         //
  23.                         continue;
  24.                 if( bUsbOutReady )                                                               
  25.                 {
  26.                         usb_OUT_done();
  27.                 }
  28.                
  29.                 if( Rec_Flag==1 )        //他已经检测到了最末尾的\R\N结束符号
  30.                 {       
  31.                         switch( RX2_Buffer[0] )
  32.                         {
  33.                                 case 'A':                        //点亮某个LED的命令
  34.                                         if(( RX2_Buffer[1]>=48 ) && ( RX2_Buffer[1]<=55 ))
  35.                                         {
  36.                                                 //LED = ~(1<<(RX2_Buffer[1]-48));
  37.                                                 LED0 = ~(RX2_Buffer[1]-48);LED1 = ~(RX2_Buffer[2]-48);LED2 = ~(RX2_Buffer[3]-48);LED3 = ~(RX2_Buffer[4]-48);
  38.                                                 LED4 = ~(RX2_Buffer[5]-48);LED5 = ~(RX2_Buffer[6]-48);LED6 = ~(RX2_Buffer[7]-48);LED7 = ~(RX2_Buffer[8]-48);
  39.                                         }
  40.                                         break;
  41.                                 case 'B':
  42.                                                 SEG0= RX2_Buffer[1]-48;SEG1= RX2_Buffer[2]-48;SEG2= RX2_Buffer[3]-48;SEG3= RX2_Buffer[4]-48;
  43.                                                 SEG4= RX2_Buffer[5]-48;SEG5= RX2_Buffer[6]-48;SEG6= RX2_Buffer[7]-48;SEG7= RX2_Buffer[8]-48;
  44.                                        
  45.                                                 break;
  46.                                 case 'C':
  47.                                                 if(RX2_Buffer[1]==48)
  48.                                                         BEEP = 0;
  49.                                                 else
  50.                                                         BEEP = 1;       
  51.                                         break;
  52.                                 case 'D':
  53.                                                 temp = Temp_Cal( ADC_Read(3) );
  54.                                                 Temp_xs = temp;
  55.                                                 //sprintf(str,"温度:%d\r\n",(int)temp);
  56.                                                 sprintf(str,"温度:%f\r\n",(float)Temp_xs/10);
  57.                                                 PrintString2(str);
  58.                                                
  59.                                
  60.                                         break;
  61.                                 case 'Z':
  62.                                                 PrintString2("HELLO STC!\r\n");
  63.                                         break;
  64.                                 default:
  65.                                         break;                               
  66.                         }
  67.                         Rec_Flag = 0;
  68.                 }
  69.                 if( TIM_10MS_Flag==1 )                                                                        //如果10ms到了
  70.                 {
  71.                         TIM_10MS_Flag = 0;                                                                        //清空标志位       
  72.                 }
  73.         }
  74. }
复制代码
注意:
sprintf(str,"温度:%f\r\n",(float)Temp_xs/10);
sprintf产生的str,实际是从下列
PrintString2(str);函数输出到PC机串口去,当然先引用#include "stdio.h"
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-10-15 15:37:36
已绑定手机

2

主题

271

回帖

782

积分

高级会员

积分
782
发表于 2025-10-4 12:24:35 | 显示全部楼层
实际运行一下:

效果还好啦



截图202510041224111476.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 13:28 , Processed in 0.137842 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表