短短的50行代码实现学号的循环,ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};ucharcodenumber[]={10,10,10,2,0,1,7,2,8,0,5,3,9,4};P0=table[number[gu+3]];
2024/4/14 6:53:29 50KB 51 单片机 学号 代码
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
//***************************************************voidSingle_Write_HMC5883(ucharREG_Address,ucharREG_data){HMC5883_Start();//起始信号HMC5883_SendByte(SlaveAddress);//发送设备地址+写信号HMC5883_SendByte(REG_Address);//内部寄存器地址,请参考中文pdfHMC5883_SendByte(REG_data);//内部寄存器数据,请参考中文pdfHMC5883_Stop();//发送停止信号}//********单字节读取内部寄存器*************************ucharSingle_Read_HMC5883(ucharREG_Address){ucharREG_data;HMC5883_Start();//起始信号HMC5883_SendByte(SlaveAddress);//发送设备地址+写信号HMC5883_SendByte(REG_Address);//发送存储单元地址,从0开始HMC5883_Start();//起始信号HMC5883_SendByte(SlaveAddress+1);//发送设备地址+读信号REG_data=HMC5883_RecvByte();//读出寄存器数据HMC5883_SendACK(1);HMC5883_Stop();//停止信号returnREG_data;}//******************************************************////连续读出HMC5883内部角度数据,地址范围0x3~0x5////******************************************************voidMultiple_read_HMC5883(void){uchari;HMC5883_Start();//起始信号HMC5883_SendByte(SlaveAddress);//发送设备地址+写信号HMC5883_SendByte(0x03);//发送存储单元地址,从0x3开始HMC5883_Start();//起始信号HMC5883_SendByte(SlaveAddress+1);//发送设备地址+读信号for(i=0;i<6;i++)//连续读取6个地址数据,存储中BUF{BUF[i]=HMC5883_RecvByte();//BUF[0]存储数据if(i==5){HMC5883_SendACK(1);//最后一个数据需要回NOACK}else{HMC5883_SendACK(0);//回应ACK}}HMC5883_Stop();//停止信号Delay5ms();}//初始化HMC5883,根据需要请参考pdf进行修改****voidInit_HMC5883(){Single_Write_HMC5883(0x02,0x00);//}
2024/2/2 6:29:11 73KB HMC5883L QMC5883L
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
网上不是很好找的资料哦,我们自己做的。
这是C程序:#include#defineucharunsignedcharsbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_3=P1^3;sbitP1_4=P1^4;sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;ucharRRR,flg,KKK;//RRR用于调速控制;
flg=0正转;
flg=1反转;flg=2不转;
KKK为P1的状态寄存ucharloop[2][4]={{0x0c,0x06,0x03,0x09},{0x09,0x03,0x06,0x0c}};voidloop1(void);voidloop2(void);voidstep(void);main(){uchari,j;TMOD=0x10;TL1=0xe0;TH1=0xb1;IE=0;while(1){if(KKK!=P1)//当P1的值发生变化,触发采集信号loop1();if(flg!=2){for(i=0;i<=3;i++){P0=loop[flg][i];for(j=0;j<=RRR;j++) {step();} }}}}voidstep(void)//产生20MS的单位步时间{TF1=0;TR1=1;while(TF1==0);TR1=0;TL1=0xe0;TH1=0xb1;}voidloop1(void)//采集顺时针或逆时针信号,P1.6=1,顺时针,P1.7=1,逆时针{KKK=P1;//暂存P1的状态if(P1_6==1){flg=0;loop2();}elseif(P1_7==1){flg=1;loop2();}elseflg=2;}voidloop2(void){if(P1_0==1)RRR=5;elseif(P1_1==1)RRR=8;elseif(P1_2==1)RRR=11;elseif(P1_3==1)RRR=14;elseif(P1_4==1)RRR=17;elseif(P1_5==1)RRR=20;}
1
ADC0809#include#include#defineuintunsignedint#defineucharunsignedchar
2023/12/21 17:54:13 49KB rar
1
网上搜集#include#include"1602.h"#include"uart.c"#include"tc35.c"//#defineRsBuf_N50//charRsBuf[RsBuf_N];//定义串口接收数据缓冲区//ucharRsPoint=0;ucharcodePhoneNO[]="+8615900000000";//改了ucharcodeText[]="IloveSDNU";ucharcodecenter[]="+8613800531500";voidmain(){TC35_init();Uart_init();init_1602();Send_AT();Set_MODE(1);//设置短消息模式Set_CENTER(center);//设置短消息中心AT+CSCA=“+8613800531500”回车TransmitText(PhoneNO,Text);while(1);//lcd_disp_str(RsBuf,2);}
2023/7/22 11:16:40 11KB 51单片机
1
部分源程序如下://=================测速计数处理===================================voidtimer1()interrupt3{time1++;}//+++++++++++++++++测速转换处理+++++++++++++++++++++++voidint1()interrupt2{longkA=0;uchartemp;TR1=0;if(SP_bit==0){TR1=1;SP_bit=1;}else{kA=time1*65536+TH1*256+TL1;temp=2500000/kA;SP_out=temp;TH1=0x00;TL1=0x00;time1=0x00;TR1=0;SP_bit=0;}}//================PWM处理与数据采集处理函数===================voidPWM_generator()interrupt1using0{if(flag==1){a--;if(a==0){flag=0;if(K_B_bit==1)a=UK;elsea=SP_in;}else{OUT_PWM=0;}}if(flag==0){b--;if(b==0){flag=1;if(K_B_bit==1)b=0xff-UK;elseb=0xff-SP_in;}else{OUT_PWM=1;}}m++;if(m==20){m=0;n++;if(n==40){n=0;EK0=SP_in-SP_out;PI_bit=1;}}}
1
51单片机实现的485通讯程序:#ifndef__485_C__#define__485_C__#include#include#defineunsignedcharuchar#defineunsignedintuint/*通信命令*/#define__ACTIVE_0x01//主机询问从机是否存在#define__GETDATA_0x02//主机发送读设备请求#define__OK_0x03//从机应答#define__STATUS_0x04//从机发送设备状态信息
2023/6/8 15:28:50 5KB 5485通讯程序
1
首要用于电离层的路途提前校对于
2023/5/4 0:20:44 7KB 电离层校正
1
共 22 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡