IIC总线VerilogFGPA模块实现注释详尽初学必备,实现了IIC读写EEPROM,已封装成模块,实例中为了testbench测试,将写入的数据变成了固定值,注释详尽,初学者也能明白,本人初学时编写,完整测试通过/****clk50M :50M输入时钟*resetKey :复位信号*IIC_SDA :IIC数据接口*IIC_SCL :IIC控制时钟接口*RWSignal :读写信号,读1,写0*startSignal :开始执行读命令信号,上升沿触发开始*readLen :需要读取的字节个数*beginAddr :开始读取的地址位置*getNum :当前对应地址获取到的字节值*sendNum :要写入的数据*dpDataOkClk :成功读处理完一个字节信息,读或写,将产生一个上升沿*///`MINCLK_DELAY产生一次计数,产生12次计数可以产生一次IIC_SCL信号的跳变//50M/2/2/MINCLK_DELAY/12=IIC_CLK`defineMINCLK_DELAY 4'd5`defineEEPROM_ADDR 7'b1010000`defineSDA_SENDDATA 1'b1`defineSDA_GETDATA 1'b0`defineREADE_DATASG 1'b1`defineWRITE_DATASG 1'b0moduleIICTest0(clk50M,resetKey,IIC_SDA,RWSignal,startSignal,beginAddr,IIC_SCL,sendNum,getNum,dpDataOkClk);
1
STC15W4K单片机读取DHT11的温湿度数据在串口打印出来,本历程已经配置好了串口1和串口3两个串口,直接在main函数中调用即可。
DHT11驱动的主要问题是时序问题,所以本历程封装好了DHT11库函数和Delay延时库函数,在做移植时只需对延时略作修改即可。
2024/8/15 19:40:52 71KB STC15W4K DHT11
1
头文件Delay.h(网上很难找到的,建议下载后收藏,并放到keil的INC文件夹中,以后就可以直接调用了)
2024/8/3 3:04:25 368B 头文件Delay.h
1
intmain(void){delay_init();//延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);//串口初始化为115200LED_Init();//初始化与LED连接的硬件接口TM1637_Init();while(1){delay_ms(1);//延时1msTM1637_NixieTubeDisplay();TM1637_NixieTubeDisplayChar(1,0);//第一位显示1TM1637_NixieTubeDisplayChar(2,1);//第二位显示2TM1637_NixieTubeDisplayChar(3,2);//第三位显示3TM1637_NixieTubeDisplayChar(4,3);//第四位显示4}}
2024/6/28 16:21:43 2.55MB STM32 TM1637 四段数码管
1
1.VB编写的自动化控制上位机,包含手动、自动控制,内有自动控制流程,其中自动控制有报警机制,在员工失误操作或外部异常时报警,如气缸感应器异常或员工物料未放置正确报警提示。
2.该程序是控制一套夹具动作的程序,动作较简单,但整个程序结构完整,适合学VB不久,或者会VB,但不会使用VB编写工业自动化控制的,可作参考。
3.采用TIMER双线程,一线程读取IO模块的输入输出状态,另一线程利用DELAY延时来进行自动化动作控制。
说明:此夹具已经上线使用一年,一切正常。
该VB程序的下位机为控汇的串口IO开发模块使用(5输入4输出),直接控制气缸等动作,省去电箱和触摸屏。
该程序可与此模块配合使用,或者自己外接其它作调试程序参考用。
2024/5/14 19:02:45 217KB VB工业控制 VB控制源码 多线程
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
实验七Java多线程一、实验目的:熟悉利用Thread类建立多线程方法。
熟悉利用Thread接口建立多线程方法。
二、实验内容:1.阅读下列程序,分析并上机检验其功能。
classDelayThreadexendsThread{privatestaticintcount=0;privateintno;privateintdelay;publicDelayThread(){count++;no=count;}publicvoidrun(){try{for(inti=0;i<10;i++){delay=(int)(Math.random()*5000);sleep(delay);System.out.println(“Thread”+no+”withadelay”+delay);}}catch(InterruptedExceptione){}}}publicclassMyThread{publicstaticvoidmain(Stringargs[]){DelayThreadthread1=newDelayThread();DelayThreadthread2=newDelayThread();thread1.start();thread2.start();try{Thread.sleep(1000);}catch(InterruptedExceptione){System.out.println(“Threadwrong”);}}}2.讲上列程序利用Runnable接口改写,并上机检验。
3.利用多线程编写一个模拟时钟(AWT程序、Runnable接口),有时/分/秒针编写一个应用程序,创建三个线程分别显示各自的时间。
三、实验要求:1.通过实验掌握Thread、Runnable使用方法;
2.程序必须能够实现多线程;
3.程序必须能够完成题目要求;
4.写出实验报告。
四、实验步骤:首先分析程序功能,再通过上机运行验证自己的分析,从而掌握通过Thread类建立多线程的方法。
通过将扩展Thread类建立多线程的方法改为利用Runnable接口的方法,掌握通过Runnable接口建立多线程的方法。
2024/2/26 3:55:02 2KB JAVA
1
uchara[]="温湿度传感器";ucharb[]="温度:";ucharc[]="湿度:";uchard[]="0123456789";typedefunsignedcharU8;typedefunsignedintU16;U8U8flag,k;U8U8temp;U8U8WD_H,U8WD_L,U8SD_H,U8SD_L,U8checkdata;U8U8WDH_temp,U8WDL_temp,U8SDH_temp,U8SDL_temp,U8checkdata_temp;U8U8comdata;voiddelay_1ms(uintn){uinti,j;for(i=0;i<=n;i++)for(j=0;j<110;j++);}voiddelay_10us(){U8i;i--;i--;i--;i--;i--;i--;}voidwrite_com(ucharcom){rs=0;rw=0;en=0;P2=com;delay_1ms(1);en=1;delay_1ms(1);en=0;}voidwrite_data(uchardate){rs=1;rw=0;en=0;P2=date;delay_1ms(1);en=1;delay_1ms(1);en=0;}voidpos(ucharx,uchary){ucharpos;if(x==0)x=0x80;elseif(x==1)x=0x90;elseif(x==2)x=0x88;elseif(x==3)x=0x98;pos=x+y;write_com(pos);}voiddisplay(U8WD_H,U8WD_L,U8SD_H,U8SD_L){U8yi,er,san,si;yi=U8WD_H/10;er=U8WD_H;san=U8SD_H/10;si=U8SD_H;pos(1,4);write_data(d[yi]);pos(1,5);write_data(d[er]);pos(2,4);write_data(d[san]);pos(2,5);write_data(d[si]);}voidcom(){U8i;for(i=0;i<8;i++){U8flag=2;while((!SJK)&&U8flag++);delay_10us();delay_10us();delay_10us();U8temp=0;if(SJK)U8temp=1;U8flag=2;while((SJK)&&U8flag++);if(U8flag==1)break;U8comdata<<=1;U8comdata|=U8temp;}}
2024/1/28 1:02:12 26KB DHT11
1
intmain(void){u16t;u16len;u16times=0;delay_init();//延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);//串口初始化为115200LED_Init();//LED端口初始化KEY_Init();//初始化与按键连接的硬件接口while(1){if(USART_RX_STA&0x8000;){len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度printf("\r\n您发送的消息为:\r\n\r\n");for(t=0;t<len;t++){USART_SendData(USART1,USART_RX_BUF[t]);//向串口1发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}printf("\r\n\r\n");//插入换行USART_RX_STA=0;}else{times++;if(times0==0)printf("请输入数据,以回车键结束\n");if(times0==0)LED0=!LED0;//闪烁LED,提示系统正在运行.delay_ms(10);}}}
2023/12/16 20:02:36 1.99MB STM32 UART
1
spi主机程序STM32CubeMx生成Hal库DMA发送接收intmain(void){/*USERCODEBEGIN1*//*USERCODEEND1*//*MCUConfiguration--------------------------------------------------------*//*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/HAL_Init();/*USERCODEBEGINInit*//*USERCODEENDInit*//*Configurethesystemclock*/SystemClock_Config();/*USERCODEBEGINSysInit*//*USERCODEENDSysInit*//*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();MX_SPI5_Init();/*USERCODEBEGIN2*/// HAL_UART_Receive_DMA(&huart1,rxBuffer,BUFFER_SIZE); /*USERCODEEND2*//*Infiniteloop*//*USERCODEBEGINWHILE*/while(1){ HAL_GPIO_WritePin(GPIOF,GPIO_PIN_6,GPIO_PIN_RESET); spi_tx[0]=6; spi_tx[1]=7; spi_tx[2]=8; spi_tx[3]=9; memset(spi_rx,0,BUFFER_SIZE); HAL_SPI_TransmitReceive_DMA(&hspi5,spi_tx,spi_rx,BUFFER_SIZE); HAL_GPIO_WritePin(GPIOF,GPIO_PIN_6,GPIO_PIN_SET); HAL_Delay(1000);/*USERCODEENDWHILE*//*USERCODEBEGIN3*/}/*USERCODEEND3*/}
2023/11/1 6:11:26 33.37MB spi DMA 主机 STM32CubeMX
1
共 25 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡