看了一下介绍,STC的功能现在已经很强大了,非常不错,加油!{:4_174:}
追更追更{:4_186:}
交作业 ,第十课虚拟键盘 + 虚拟数码管
没有输入是8位数码管 显示 “- - - - - - - -” ,有输入时 按顺序从左边显示 输入数字,当8位输入完成时,从左到右比对 是否为“1 2 3 4 5 6 7 8” ,一样时 数码管显示“ open” 不一样时显示“- - - - - - - -”
uchar Shou_Temp = 0, Num1 = 0;
uchar Seg_Temp = {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
void PC_KEY_Task3(void)
{
uchar j;
SEG7_ShowCode(Seg_Temp);
if(Shou_Temp)
{
Seg_Temp = DuanMa;
Shou_Temp = 0;
if(++Num1 > 7)
{
Num1 = 0;
State = 1;
}
}
if(State) State++;
if(State == 2)
{
State = 0; State = 0;
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
if(Seg_Temp == 0x06) //0x5C, 0x73,0x79 ,0x54 //o p e n 段码
{
if(Seg_Temp == 0x5B)
{
if(Seg_Temp == 0x4F)
{
if(Seg_Temp == 0x66)
{
if(Seg_Temp == 0x6D)
{
if(Seg_Temp == 0x7D)
{
if(Seg_Temp == 0x07)
{
if(Seg_Temp == 0x7F)
{
Seg_Temp = 0x40; Seg_Temp = 0x40;
Seg_Temp = 0x5C; Seg_Temp = 0x73;
Seg_Temp = 0x79; Seg_Temp = 0x54;
Seg_Temp = 0x40; Seg_Temp = 0x40;
}
}
}
}
}
}
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
}
任务调度
static TASK_COMPONENTS Task_Comps[]=
{
{0, 500, 500, LED0_Blink}, //任务1 500ms
{0, 1000, 1000, LED1_Blink}, //任务21000ms
{0, 2000, 2000, LED2_Blink}, //任务3 2000ms
// {0, 1, 1, Seg_Task},
{0, 10, 10, KEY_Task},
// {0, 50, 50, Time_Count},
{0, 500, 500, PC_KEY_Task3},
/* Add new task here */
};
主函数
void main(void)
{
Sys_Init();
usb_init(); //USB CDC 接口配置
Timer0_Init(); //启动定时器0
// Init_595();
EA = 1; //IE |= 0x80;
IE2 |= 0x80; //打开USB中断
P40 = 0; //LED灯开关打开
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果收到数据 原路返回
{
Shou_Temp = UsbOutBuffer;
//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback(); //执行函数
}
}
上面改正下,有点问题
uchar Shou_Temp = 0, Num1 = 0;
uchar Seg_Temp = {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
void PC_KEY_Task3(void)
{
uchar j;
SEG7_ShowCode(Seg_Temp);
if(Shou_Temp)
{
Seg_Temp = DuanMa;
Shou_Temp = 0;
if(++Num1 > 7)
{
Num1 = 0;
State = 1;
}
}
if(State) State++;
if(State == 2)
{
State = 0; State = 0;
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
if(Seg_Temp == 0x06) //0x5C, 0x73,0x79 ,0x54 //o p e n 段码
{
if(Seg_Temp == 0x5B)
{
if(Seg_Temp == 0x4F)
{
if(Seg_Temp == 0x66)
{
if(Seg_Temp == 0x6D)
{
if(Seg_Temp == 0x7D)
{
if(Seg_Temp == 0x07)
{
if(Seg_Temp == 0x7F)
{
Seg_Temp = 0x40; Seg_Temp = 0x40;
Seg_Temp = 0x5C; Seg_Temp = 0x73;
Seg_Temp = 0x79; Seg_Temp = 0x54;
Seg_Temp = 0x40; Seg_Temp = 0x40;
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
else
{
for(j=0; j<8; j++)
{
Seg_Temp = 0x40;
}
printf("Seg_Temp 第一个元素是%d\r\n",(int)Seg_Temp);
}
}
}
国芯加油
啥时候更新?
继续学习
又来学习了
# 第一章:序言
当我踏入单片机领域时,这个视频使得AI8051U 成为了我的启蒙芯片之一。它不仅让我接触到了更高级的芯片知识,还为我打开了项目开发的大门。在对比 STC32G 与 AI8051U 后,我发现 AI8051U 的优势十分明显,让我对其项目开发充满期待。
AI8051U 搭载了功能强大的 flash 编辑器,不仅可以实现屏幕显示,还能支持视频播放。这意味着它可以轻松应对多种交互场景,例如在智能设备中显示动态教程或广告,极大地丰富了用户体验。在音频处理方面,它支持 IIS 录放音,能够高效地采集和回放音频数据,无论是语音输入还是音乐播放,都能轻松应对。
在灯光控制方面,AI8051U 的 PWM_DMA 功能表现出色。与 STC32G 通过 spi_dma 驱动 WS2812 灯珠相比,AI8051U 的 PWM_DMA 不仅效率更高,还能优化资源配置,更适合复杂的灯光控制需求。此外,它还支持 FFT 预算功能,这对于音频信号分析等运算场景具有重要意义,例如在音乐分析或声音监测中,可以实现更精准的频率分析。
AI8051U 还支持 QSPI 接口,能够与外部 FLASH 高速通信,极大地拓展了数据存储与读取能力。这使得它在处理大量数据时更加高效,例如在视频存储或音频库管理中,QSPI 的高速通信能力可以确保数据的快速读写。
综合来看,AI8051U 的这些特性使其成为开发动态音乐灯光控制器的理想选择。它可以实现音乐与灯光的完美同步,通过音频分析控制灯光效果,并通过屏幕显示提供交互界面。我相信基于 AI8051U 的开发,一定能打造出一款极具潜力的动态音乐灯光控制器。
{:qiang:}{:qiang:}