曹会杰
发表于 2025-6-24 21:36:42
/*
MAIN_Fosc24000000Hz
*/
#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++;
if(i==3)ucLed_Mode=3;
DelayXms(500);
break;
case 3:
ucLed=ucLed_Buff;
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();
}
}
ZIJIN_CHJ
发表于 2025-7-2 23:18:00
冲哥辛苦了,我想问一下第9 课数码管中的HC595驱动函数中的 "CY"是在什么地方定义的.这里有的弄不明白.
海洋
发表于 2025-7-10 16:44:18
感谢孜孜不倦的教学
木木01
发表于 2025-7-31 19:42:09
能不能封装一下usb的更多功能,usbhub, usbhid设备等
yunhehao
发表于 2025-9-10 16:54:31
果然高端,受益匪浅,感谢大佬
wuzhengmin
发表于 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位模式
GGG_988
发表于 2025-9-18 08:10:12
ZIJIN_CHJ 发表于 2025-7-2 23:18
冲哥辛苦了,我想问一下第9 课数码管中的HC595驱动函数中的 "CY"是在什么地方定义的.这里有的弄不明白.
sbit CY = PSW^7;
wuzhengmin
发表于 2025-10-3 11:56:46
要小结一下!
从上个月开始重新学习冲哥的32位8051视频教程,今天看到21集:
第二十一集:串口应用上 昨晚把很久没有使用的一箭双雕小板也找出来了
还好,一切顺利:
把冲哥的例程改了一点:多点亮几个数码管和LED灯...............
本来还想把温度读出来,结果下载运行后没反应,好像整个程序都跑飞啦?
暂时不管按“D” 的温度显示啦!
wuzhengmin
发表于 2025-10-4 12:22:46
今天学习了冲个的《STC32G单片机视频教程》第二十一集:串口应用上和第二十一集:串口应用下
小改了一下,把温度的测量值带进去,真实一点点:
void main() //程序开始运行的入口
{
char str;
int temp=0;
float Temp_xs=0;
sys_init(); //USB功能+IO口初始化
UART2_config(2); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
usb_init(); //usb库初始化
delay_ms(500);
Timer0_Init(); //定时器0初始化
ADC_Init();
P1M0 = 0x00; P1M1 = 0x08;
EA = 1; //CPU开放中断,打开总中断。
PrintString2("STC32G UART2 Test Programme!\r\n");//UART2发送一个字符串
while(1) //死循环
{
delay_ms(2);
if( DeviceState != DEVSTATE_CONFIGURED ) //
continue;
if( bUsbOutReady )
{
usb_OUT_done();
}
if( Rec_Flag==1 ) //他已经检测到了最末尾的\R\N结束符号
{
switch( RX2_Buffer )
{
case 'A': //点亮某个LED的命令
if(( RX2_Buffer>=48 ) && ( RX2_Buffer<=55 ))
{
//LED = ~(1<<(RX2_Buffer-48));
LED0 = ~(RX2_Buffer-48);LED1 = ~(RX2_Buffer-48);LED2 = ~(RX2_Buffer-48);LED3 = ~(RX2_Buffer-48);
LED4 = ~(RX2_Buffer-48);LED5 = ~(RX2_Buffer-48);LED6 = ~(RX2_Buffer-48);LED7 = ~(RX2_Buffer-48);
}
break;
case 'B':
SEG0= RX2_Buffer-48;SEG1= RX2_Buffer-48;SEG2= RX2_Buffer-48;SEG3= RX2_Buffer-48;
SEG4= RX2_Buffer-48;SEG5= RX2_Buffer-48;SEG6= RX2_Buffer-48;SEG7= RX2_Buffer-48;
break;
case 'C':
if(RX2_Buffer==48)
BEEP = 0;
else
BEEP = 1;
break;
case 'D':
temp = Temp_Cal( ADC_Read(3) );
Temp_xs = temp;
//sprintf(str,"温度:%d\r\n",(int)temp);
sprintf(str,"温度:%f\r\n",(float)Temp_xs/10);
PrintString2(str);
break;
case 'Z':
PrintString2("HELLO STC!\r\n");
break;
default:
break;
}
Rec_Flag = 0;
}
if( TIM_10MS_Flag==1 ) //如果10ms到了
{
TIM_10MS_Flag = 0; //清空标志位
}
}
}
注意:
sprintf(str,"温度:%f\r\n",(float)Temp_xs/10);
sprintf产生的str,实际是从下列
PrintString2(str);函数输出到PC机串口去,当然先引用#include "stdio.h"
wuzhengmin
发表于 2025-10-4 12:24:35
实际运行一下:
效果还好啦