stm32用一个定时器(TIM3),实现四路不同频率、占空比可调的PWM
2024/5/7 21:46:56 536KB STM32 定时器 PWM 不同频率
1
窗体的浮动及隐藏:通过Panel、timer控件并加载Panel的鼠标事件实现。
2024/4/19 1:43:09 67KB VS2015C#
1
/***************深圳市赛亿科技开发有限公司*********************文件名:adc*描述:多通道AD采集(源文件)*实验平台:STM8S105开发板*库版本:V1.0*作者:hcr*QQ:630054913*修改时间:2014-9-20*******************************************************************************/#include"adc.h"u16AdcData_Buff[10];//AD采集缓存u16AdcValue_Channel1;//通道1值u16AdcValue_Channel2;//通道2值u16AdcValue_Channel3;//通道3值floatAdc_V1;//通道1值电压值floatAdc_V2;//通道2值电压值floatAdc_V3;//通道3值电压值/***************************************************************************函数名:Adc_Task(void)*描述:AD不通通道选择*输入:无*输出:无*返回:无*调用:10ms调用*************************************************************************/voidAdc_Task(void){staticu8Adc_Channel=1;staticu8Adc_Timer=0;staticu16Adc_GetValue;switch(Adc_Channel)//通道选择{case1://通道1Adc_GetValue=ADC1_GetConversionValue();//获取ADC转换数AdcData_Buff[Adc_Timer]=Adc_GetValue;//保存采样值if(Adc_Timer8) {Adc_Timer=0;//复位 Temp_Choose();//冒泡法求中间值AdcValue_Channel1=AdcData_Buff[5];//取中间值Adc_V1=(3.28*AdcValue_Channel1)/1023;//算出实际电压AdcData_Clean();//清除缓存数据Adc_Channel=2;//另一通道AdcChannel_Start(ADC1_CHANNEL_2);//ADC,通道2启动 }break;case2://通道2
2024/4/17 19:02:08 312KB stm8s AD多通道采集
1
#include#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong#defineLED_DATP0sbitLED_SEG0=P2^7;sbitLED_SEG1=P2^6;sbitLED_SEG2=P2^5;sbitLED_SEG3=P2^4;#defineTIME_CYLC100//12M晶振,定时器10ms中断一次我们1秒计算一次转速//1000ms/10ms=100#definePLUS_PER10//码盘的齿数,这里假定码盘上有10个齿,即传感器检测到10个脉冲,认为1圈#defineK1.65//校准系数unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchardataDisbuf[4];//显示缓冲区uintTcounter=0;//时间计数器bitFlag_Fresh=0;//刷新标志bitFlag_clac=0;//计算转速标志bitFlag_Err=0;//超量程标志voidDisplayFresh();//在数码管上显示一个四位数voidClacSpeed();//计算转速,并把结果放入数码管缓冲区voidinit_timer();//初始化定时器T0\T1voidDelay(uintms);//延时函数voidit_timer0()interrupt1/*interruptaddressis0x000b*/{TF0=0;//定时器T0用于数码管的动态刷新TH0=0xC0;TL0=0x00;Flag_Fresh=1;Tcounter++;if(Tcounter>TIME_CYLC){Flag_clac=1;//周期到,该重新计算转速了}}voidit_timer1()interrupt3/*interruptaddressis0x001b*/{TF1=0;//定时器T1用于单位时间内收到的脉冲数//要速度不是很快,T1永远不会益处Flag_Err=1;//如果速度很高,我们应考虑另外一种测速方法:T测速法}voidmain(void){Disbuf[0]=0;//开机时,初始化为0000Disbuf[1]=0;Disbuf[2]=0;Disbuf[3]=0;init_timer();while(1){if(Flag_Fresh){Flag_Fresh=0;DisplayFresh();//定时刷新数码管显示}if(Flag_clac){Flag_clac=0;ClacSpeed();//计算转速,并把结果放入数码管缓冲区Tcounter=0;//周期定时清零TH1=TL1=0x00;//脉冲计数清零}if(Flag_Err)//超量程处理{Disbuf[0]=0x9e;//开机时,初始化为0000Disbuf[1]=0x9e;Disbuf[2]=0x9e;Disbuf[3]=0x9e;while(1){DisplayFresh();//不再测速等待复位i}}}}//在数码管上显示一个四位数voidDisplayFresh(){P2|=0xF0;LED_SEG0=0;LED_DAT=table[Disbuf[0]];Delay(1);P2|=0xF0;LED_SEG1=0;LED_DAT=table[Disbuf[1]];Delay(1);P2|=0xF0;LED_SEG2=0;LED_DAT=table[Disbuf[2]];Delay(1);P2|=0xF0;LED_SEG3=0;LED_DAT=table[Disbuf[3]];Delay(1);P2|=0xF0;}//计算转速,并
2024/3/2 19:19:54 400KB 光电传感器、测速、protus、pcb
1
89C51/52单片机头文件内容详解sfrP0=0x80;//P0口sfrP1=0x90;//P1口sfrP2=0xA0;//P2口sfrP3=0xB0;//P3口sfrPSW=0xD0;//程序状态字,具体位意义见位定义sfrACC=0xE0;//累加器,程序员最常用的sfrB=0xF0;//寄存器,主要用于乘除sfrSP=0x81;//堆栈指针,初始化为07;
先加1后压栈,先出栈再减1,sfrDPL=0x82;sfrDPH=0x83;//数据指针,用途大sfrPCON=0x87;//电源控制sfrTCON=0x88;//Timer/Counter控制sfrTMOD=0x89;//Timer/Counter方式控制sfrTL0=0x8A;sfrTL1=0x8B;//sfrTH0=0x8C;//存着当前的计数值sfrTH1=0x8D;//我就想不明白,当时设计的时候,为什么不把TH0,TL0放在连续的地址!sfrIE=0xA8;//好东西,中断控制sfrIP=0xB8;//中断优先级控制,没有设计过要求时间严格的系统,所以至今没有用过sfrSCON=0x98;//哇,熟悉,串口控制寄存器sfrSBUF=0x99;//哇,更熟悉,串口缓冲寄存器/*BITRegister*//*PSW*/sbitCY=0xD7;//进位或借位,有就是1,没有就是0sbitAC=0xD6;//辅助进借位,(麻烦b)sbitF0=0xD5;//没有具体用途,可以由用户决定
2024/3/2 6:23:53 90KB 头文件详解
1
VB使用API在内存中绘制曲线再显示到图片框上,CPU资源消耗小,效率高,比Line方法快5倍!1、在内存中创建绘图设备场景2、设置内存设备场景属性3、在内存设备场景上绘制曲线4、通过BitBlt将内存设备场景覆盖到图片框5、通过Timer循环执行,形成动态曲线
1
基于visualstudio2015的MFC多文档的OpenGL的时钟程序,实现了获取本地时间,时针分针秒针的精确走向。
2024/2/5 11:33:37 152KB OpenGL 时钟 MFC 多文档
1
垃圾袋移除通知订阅关系赋值新的垃圾袋会让之前垃圾袋绑定的订阅关系释放用来给timer停止
2023/12/14 6:31:01 533KB swift RxSwift 垃圾袋 ios
1
Android利用Timer和Handler实现倒计时功能,包含暂停倒计时、停止倒计时
2023/12/8 15:09:30 22KB 异步任务
1
1、基于Z-Stack-3.0.2;
2、IAR版本:IAR-10.10;
3、平台:CC2530;
4、剔除所有ZigBee相关的代码,只留下OSAL核心部分和HAL层;
5、OSAL定时器采用16位计数器的定时器1,单位计时:4us,累计1ms更新OSAL_Clock和OSAL_Timer;
6、增加睡眠时间更新,使OSAL_Clock和OSAL_Timer不丢失时间;
7、在IO中断服务程序立即启动HAL_PWRMGR_HOLD_EVENT事件,是按键能正常反应(原版Z-Stack睡眠是按键反应较慢),按键事件完成后立即启动HAL_PWRMGR_CONSERVE_EVENT事件,使使设备能正常睡眠;
2023/12/6 8:56:45 234KB OSAL CC2530
1
共 58 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡