STM32电机库5.4开源无感注释 KEIL工程文件 辅助理解ST库 寄存器设置AD TIM1 龙贝格+PLL 前馈控制 弱磁控制 foc的基本流 svpwm占空比计算方法 斜坡启动 死区补偿 有详细的注释, 当前是无传感器版本龙贝格观测,三电阻双AD采样!
2024-08-30 11:47:03 127KB stm32
1
51单片机设计喇叭发出消防车警报声音keil工程文件C源文件,通过驱动喇叭或蜂鸣器发出防车警报声音,程序注释非常清晰
2023-09-26 21:50:25 10KB 51单片机
ADS7606芯片STC15L2K60S2单片机读写驱动程序KEIL工程文件源码, void main(void) { uint8_t ucRefresh = 0; uint8_t ucFifoMode = 0; bsp_Init(); /* 初始化底层硬件。 该函数在 bsp.c文件 */ PrintfLogo(); /* 打印例程logo */ PrintfHardInfo(); /* 打印硬件接线信息 */ bsp_DelayMS(100); bsp_InitAD7606(); bsp_StartAutoTimer(0, 500); while(1) { bsp_Idle(); if (ucRefresh == 1) { ucRefresh = 0; /* 处理数据 */ ad7606_mak(); /* 打印ADC采样结果 */ ad7606_disp(); } if (ucFifoMode == 0) /* AD7606 普通工作模式 */ { if (bsp_CheckTimer(0)) { /* 每隔500ms 进来一次. 由软件启动转换 */ ad7606_Scan(); ucRefresh = 1; /* 刷新显示 */ } } else { /* 在FIFO工作模式,bsp_AD7606自动进行采集,数据存储在FIFO缓冲区。 结果可以通过下面的函数读取: uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc) 你可以将数据保存到SD卡,或者保存到外部SRAM。 本例未对FIFO中的数据进行处理,进行打印当前最新的样本值。 如果主程序不能及时读取FIFO数据,那么 AD7606_FifoFull() 将返回真。 8通道200K采样时,数据传输率 = 200 000 * 2 * 8 = 3.2MB/S */ if (bsp_CheckTimer(0)) { ucRefresh = 1; /* 刷新显示 */ } } } } /* ********************************************************************************************************* * 函 数 名: ad7606_mak * 功能说明: 处理采样后的数据 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void ad7606_mak(void) { uint8_t i; int32_t tt; for (i = 0;i < CH_NUM; i++) { s_dat[i] = ad7606_ReadAdc(i); /* 32767 = 5V , 这是理论值,实际可以根据5V基准的实际值进行公式矫正 */ //volt[i] = ((int16_t)dat[i] * 5000) / 32767; /* 计算实际电压值(近似估算的),如需准确,请进行校准 */ // volt[i] = dat[i] * 0.3051850947599719 // 除以 3.2767 tt = s_dat[i]; s_volt[i] = (tt * 10000) / 32767; } } /* ********************************************************************************************************* * 函 数 名: ad7606_disp * 功能说明: 处理采样后的数据 * 形 参:无 * 返 回 值: 无
LCD12864显示屏C51单片机驱动源码KEIL工程文件,可做为你的学习设计参考。 void main() { LCD12864_Reset(); //初始化液晶 LCD12864_HAIZI_SET(); //设置为普通模式 Delay_ms(100); LCD12864_NoWaitIdle_COM_Write(0x80); //设置指针 LCD12864_write_word("别人笑我太疯癫,"); //显示内容 LCD12864_NoWaitIdle_COM_Write(0x90); //设置指针 LCD12864_write_word("我笑他人看不穿。"); //显示内容 LCD12864_NoWaitIdle_COM_Write(0x88); //设置指针 LCD12864_write_word("不见五陵豪杰墓,"); //显示内容 LCD12864_NoWaitIdle_COM_Write(0x98); //设置指针 LCD12864_write_word("无花无酒锄作田。"); //显示内容 while(1) { } } //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void Delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i
LCD1602显示屏+DS18B20测温C51单片机驱动源码KEIL工程文件,可作为你的学习设计参考。 void main() { LCD1602_Init(); //初始化LCD1602 DS1302_Init(); //初始化DS1302 LCD1602_write_com(0x80); LCD1602_write_word("Welcome to use!"); Temp_Buffer = Get_temp(); //读取DS18B20的值 Delay_ms(1000); LCD1602_write_com(0x01); //清屏 while(1) { DS1302_GetTime(&DS1302Buffer); //获取当前RTCC值 if(Flag_Time_Refresh == 1 && Flag_KEY_Set == 0) //数据更新时才刷新LCD { Flag_Time_Refresh = 0; Display_RTCC(); //显示实时时钟 Display_Temp(); //获取并显示温度值 } Scan_Key(); //按键扫描 switch( KEY_NUM ) { case 1: //按键1执行程序 KEY_NUM = 0; //清空按键标志 Flag_KEY_Set = ~Flag_KEY_Set; //设置按键标志位翻转 if(Flag_KEY_Set) { LCD1602_write_com(0x0d); //LCD1602指针闪烁开 LCD1602_write_com(0x80+ 3); //指针设置到第一行第4列 KEY2_Count = 0; //按键S2计数清零 } else { LCD1602_write_com(0x0c); //LCD1602指针闪烁关 } break; case 2: //按键2执行程序 KEY_NUM = 0; //清空按键标志 if(Flag_KEY_Set) //在设置状态时运行 { KEY2_Count++; if(KEY2_Count == 7) KEY2_Count = 0; switch(KEY2_Count) { case 0: LCD1602_write_com(0x80+ 3); //指针指向年,闪烁 break; case 1: LCD1602_write_com(0x80+ 6); //指针指向月,闪烁 break; case 2: LCD1602_write_com(0x80+ 9); //指针指向日,闪烁 break; case 3: LCD1602_write_com(0x80+ 15); //指针指向星期,闪烁 break; case 4: LCD1602_write_com(0x80+ 0x40 + 1); //指针指向小时,闪烁 break; case 5: LCD1602_write_com(0x80+ 0x40 + 4); //指针指向分钟,闪烁 break; case 6: LCD1602_write_com(0x80+ 0x40 + 7); //指针指向秒钟,闪烁 break; default : break; } } break; case 3: //按键3执行程序 KEY_NUM = 0; //清空按键标志 if(Flag_KEY_Set) //在设置状态时运行 { switch(KEY2_Count) { case 0: DS1302Buffer.Year++; if(DS1302Buffer.
用Keil4.22创建的ucosii工程文件,编译无问题。是移植到LPC2300芯片上的,创建多任务,运行无问题。
2022-01-21 11:29:25 642KB ucosii工程
1
用51单片机写的电子表程序,是Keil工程文件,直接下载即可,程序中有时钟,秒表,定时三种功能,用数码管显示,按键选择。
2021-11-22 20:12:16 40KB 电子表
1
在具备了一定的C语言和单片机基础后,对按键扫描的方法进行拓展
2021-11-09 17:08:31 101KB 单片机 按键扫描 状态机
1
stm32f030c8t6低功耗standby模式3.1微安uA,在3.3V侧,进入待机模式之后,测得功耗为3.1uA,基本达到芯片规格书给出的结果。亲测,上传为keil工程文件
2021-09-08 11:21:05 3.36MB stm32 低功耗 standby
1
使用STM32的定时器与外部中断配合实现超声波模块的测距功能。 这里总体说一说此程序比较理想的执行情况: (1)超声波被调用初始化函数,定时器被设定为可中断,并且定时器开始计数; (2)计数到溢出,触发定时器中断,它会调用超声波启动函数Ultrasound_start(); (3)超声波启动后,有回波信号,将触发外部中断(上边沿),进入外部中断直接关掉定时器中断和定时器,判断确实有回波信号,进入到(检测到返回信号)代码段,清空定时器的CNT寄存器,重设重载值ARR寄存器,开启定时器。此时,定时器进行ECHO引脚得高电平持续时间检测; (4)再一次中断来临(下降沿),还是直接关掉定时器中断触发和定时器,这次进入(返回信号结束)代码段,首先判断定时器是不是计数的高电平时间。若是,就判断我的获取次数是否已满,满了就置位flag, 没有满,就将定时器CNT寄存器里面的值提出来参与距离公式运算得到当前所测距离。执行到最后继续开启定时器中断和定时器,并重新设定重载值。此时定时器进行间隔时间计数。所以,定时器计数到溢出中断后,又会去调用一次超声波启动函数Ultrasound_start();
2021-08-18 13:34:26 7.07MB 嵌入式