关于stc12c5a60s2单片机的定时器问题

图片说明我不懂为什么是TMOD&=0xf0而不是TMOD=0xf0,这样做是有什么含义吗?求解答

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
51单片机定时器中断问题
代码如下,设置断点后发现,程序不进入定时器中断函数 #include <REG52.H> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit key=P3^7; uchar display[8][8]; /*rank:Z,H,B,I,T,I,心,U*/ uchar code table_cha[8][8]={0x7E, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x7E, 0x66, 0x66, 0x66, 0x7E, 0x7E, 0x66, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x7E, 0x7E, 0x66, 0x66, 0x3E, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x3C}; void sinter() { IE=0x83; //允许INT0和T0中断 IP=0x01; //设置中断优先级 TCON=0x01; //设置INT0工作方式为边沿触发 TMOD=0x00; TH0=0xc0; TL0=0; //假设为方式0,初值为1100/0000/00000B 要求的定时值为1.024ms TR0=1; } void delay5us(void) //误差 -0.026765046296us STC 1T 22.1184Mhz { unsigned char b; for(b=7;b>0;b--); //for(a=2;a>0;a--); } void delay(uint i) { while (i--){ delay5us();}//12t的mcu 注释这个延时即可 } //将table_cha中第cha行元素赋给display第y列 void type(uchar cha,uchar y) { uchar xx; for (xx=0;xx<8;xx++) { display[xx][y]=table_cha[cha][xx]; } } //使display中元素均为le void clear(char le) { uchar i,j; for (j=0;j<8;j++) { for (i=0;i<8;i++) display[j][i]=le; } } void flash() { clear(0); type(0,0); delay(60000); delay(60000); //0.6s type(1,0); delay(60000); delay(60000); type(2,0); delay(60000); delay(60000); type(3,0); delay(60000); delay(60000); type(4,0); delay(60000); delay(60000); type(5,0); delay(60000); delay(60000); type(6,0); delay(60000); delay(60000); type(7,0); delay(60000); delay(60000); clear(0); } void main() { while(1) { flash(); } clear(0); } void print() interrupt 1 { uchar i; static uchar layer=0; P1=0; for (i=0;i<8;i++) { P2=1<<i; //依次扫描1-8片 delay(3); P0=display[layer][i]; delay(3); } P1=1<<layer; if (layer<7) layer++; else layer=0; TH0=0xc0; TL0=0; } void pause () interrupt 0 { while(!key){} }
求大神有没有一个定时器控制多个舵机的方法
我用stc89c52想做一个用06蓝牙手机遥控舵机转向的装置,单片机一共2个定时器,串口通信用了一个,还剩1一个定时器,可是我有5个舵机。用什么方法才能一起控制?求大神!
在单片机中 设置pwm时会用到定时器,定时器的作用是什么了 详细一些
#define MAIN_Fosc 11059200L //定义主时钟 #include "15W4KxxS4.H" #define uint16 unsigned int #define uint8 unsigned char /************************************** 功能描述:延时函数 入口参数:uint16 x ,该值为1时,延时1ms 返回值:无 ***************************************/ void delay_ms(uint16 x) { uint16 j,i; for(j=0;j<x;j++) { for(i=0;i<1100;i++); } } /************************************************************************************** 功能描述:对PWM3和PWM3进行初始化 入口参数:无 返回值:无 **************************************************************************************/ void PWM2PWM3_Configuration(void) { PWMCFG &= 0xBF; //将CBTADC位置0,即PWM计数器归零时不触发ADC转换 PWMIF &= 0xBF; //将CBIF位置0,PWM计数器归零中断标志位,需软件清零 P_SW2 |= 0x80; //将EAXSFR位置1,以访问PWM在扩展RAM区的特殊功能寄存器 //对PWM2的初始化部分 PWM2CR |= 0x08; //将PWM2_PS位置1,选择PWM2的输出引脚是P2.7 PWMCR |= 0x01; //将ENC2O位置1,PWM2的端口为PWM输出口,受PWM波形发生器控制 PWMCFG &= 0xFE; //将C2INI位置0,设置PWM2输出端口的初始电平为低电平 PWMIF &= 0xFE; //将C2IF位置0,PWM2中断标志位,需软件清零 PWM2CR |= 0x04; //将EPWM2I位置1,使能PWM2中断 PWM2CR &= 0xFD; //将EC2T2SI位置0,关闭T2翻转时中断 PWM2CR &= 0xFE; //将EC2T1SI位置0,关闭T1翻转时中断 //对PWM3的初始化部分 PWM3CR |= 0x08; //将PWM3_PS位置1,选择PWM3的输出引脚是P4.5 PWMCR |= 0x02; //将ENC3O位置1,PWM3的端口为PWM输出口,受PWM波形发生器控制 PWMCFG &= 0xFD; //将C3INI位置0,设置PWM3输出端口的初始电平为低电平 PWMIF &= 0xFD; //将C3IF位置0,PWM3中断标志位,需软件清零 PWM3CR |= 0x04; //将EPWM3I位置1,使能PWM3中断 PWM3CR &= 0xFD; //将EC3T2SI位置0,关闭T2翻转时中断 PWM3CR &= 0xFE; //将EC3T1SI位置0,关闭T1翻转时中断 //对PWM2和PWM3翻转计数器赋初值 PWM2T1 =1; //赋值PWM2第一次翻转计数器值 PWM2T2 = 0x00FA; //赋值PWM2第二次翻转计数器值 PWM3T1 =1; //赋值PWM3第一次翻转计数器值 PWM3T2 = 0x00FA; //赋值PWM3第二次翻转计数器值 //对PWM波形发生器时钟源进行初始化 PWMCKS |= 0x10; //将SELT2位置1,PWM时钟源为定时器2溢出脉冲 PWMC = 0x00FA; //PWM计数器赋值(同时对PWMCH和PWMCL进行了赋值) AUXR |= 0x04; //定时器2时钟为Fosc,即1T T2L = 0xE0; //设定定时初值 T2H = 0xFE; //设定定时初值 AUXR |= 0x10; //启动定时器2 P_SW2 &= 0x7F; //将EAXSFR位置0,恢复访问XRAM //PWM外部异常控制寄存器的操作 PWMFDCR &= 0xDF; //将ENFD位置0,关闭PWM外部异常检测功能 PWMFDCR &= 0xF7; //将ENDI位置0,关闭PWM异常检测中断 PWMFDCR &= 0xFB; //将FDCMP位置0,比较器与PWM无关 PWMFDCR &= 0xFD; //将FDIO位置0,P2.4的状态与PWM无关 PWMFDCR &= 0xFE; //将FDIF位置0,PWM异常检测中断标志位,需软件清零 IP2 |= 0x40; //将PPWM位置1,使能PWM中断为最高优先级中断 //使能PWM波形发生器 PWMCR |= 0x80; //将ENPWM位置1,使能PWM波形发生器,PWM计数器开始计数 PWMCR &= 0xBF; //将ECBI位置0,禁止PWM计数器归零中断 } /*************************************************************************** * 描 述 : PWM中断服务函数 * 入 参 : 无 * 返回值 : 无 **************************************************************************/ void PWM(void) interrupt PWM_VECTOR using 1 { PWMIF &= 0xBF; //将CBIF位置0,PWM计数器归零中断标志位,需软件清零 PWMIF &= 0xFE; //将C2IF位置0,PWM2中断标志位,需软件清零 PWMIF &= 0xFD; //将C3IF位置0,PWM3中断标志位,需软件清零 } /******************************************************** 功能描述:主函数 入口参数:无 返回值:无 *********************************************************/ int main() { uint8 flag=1; uint16 ledpwmval=0; ///////////////////////////////////////////////// //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为 // 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用 //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2 // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5 ///////////////////////////////////////////////// P2M1 &= 0x7F; P2M0 &= 0x7F; //设置P2.7为准双向口 P4M1 &= 0xDF; P4M0 &= 0xDF; //设置P4.5为准双向口 PWM2PWM3_Configuration(); //初始化PWM2和PWM3口 EA = 1; //允许总中断 while(1) { delay_ms(100); //延迟每次指示灯亮度的时间,更方便观察实验现象 if(flag) //如果标识符为1则递增变量ledpwmval ledpwmval++; else //如果标识符为0则递减变量ledpwmval ledpwmval--; if(ledpwmval>248) //如果变量ledpwmval递增到一定值则控制标识符为0,以实现ledpwmval递减 flag=0; if(ledpwmval==1) //如果变量ledpwmval递减到一定值则控制标识符为1,以实现ledpwmval递增 flag=1; P_SW2 |= 0x80; //将EAXSFR位置1,以访问PWM在扩展RAM区的特殊功能寄存器 PWM2T1 =(uint16)ledpwmval; //赋值PWM2第一次翻转计数器值(不断变化值) PWM2T2 = 0x00FA; //赋值PWM2第二次翻转计数器值(定值) PWM3T1 =(uint16)ledpwmval; //赋值PWM3第一次翻转计数器值(不断变化值) PWM3T2 = 0x00FA; //赋值PWM3第二次翻转计数器值(定值) P_SW2 &= 0x7F; //将EAXSFR位置0,恢复访问XRAM } }
求大佬检查下我的代码为什么不能完成我想要的功能?关于51单片机C语言串口通讯方面的。
# 欲完成的功能: 我想要用pc的串口通讯助手给单片机发送xyz坐标,并将xyz坐标分别存到xm,ym,zm三个字符串数组中,然后用串口发送字符串函数将xm,ym,zm这三个数组再发送给串口通讯助手显示其值。 以下是这部分的代码: ``` #include <stc15f2k60s2.h> #define FOSC 12000000 //设置晶振 #define BAUD 9600 //设定的波特率 char buf_string[13]; //定义数据包长度为13个字符 unsigned char flag=0; unsigned char busy; unsigned char tag; unsigned char i,j=0,k=0,a,b,c; void UART_Init(void) //初始化 { SCON=0x50; //8位UART 波特率可变 允许接受 T2L=(65536-(FOSC/4/BAUD)); //设置装载值 T2H=(65536-(FOSC/4/BAUD))>>8; AUXR =0x14; //T2为1T模式,并启动定时器2 AUXR |=0x01; //选择定时器2为串口1的波特率发生器 ES =1; //使能串口中断 EA =1; //开启总中断 } void UART_Sendchar(unsigned char dat) //串口发送函数 { while(busy); busy=1; SBUF=dat; } void UART_SendString(unsigned char *s) //串口字符串发送 { while(*s) { UART_Sendchar(*s++); } } ## /*之前的代码应该没问题,在此之后之后是我认为有可能出问题的字段*/ void ReceiveString() //串口字符串接收函数 { if(j<13) //将输入坐标总字数规定在13位以内,且接受格式规定为(X,Y,Z),最大可输入的位数为13位,例如(-99,-99,-99)。 { buf_string[j]=SBUF; if(buf_string[j]==',' && a==0) a=j;//记录下第一个逗号 if(buf_string[j]==',' && a!=j) b=j;//记录下第二个逗号 if(buf_string[j]==')') c=j; //记录下右括弧,也就是数据的最后一位 j++; } } bit Deal_UART_RecData() //处理串口接收数据包函数(成功处理数据包则返回1,否则返回0) { buf_string[c+1]='\0'; //让接受到的")"的之后一位清零 if(buf_string[0]=='(' && buf_string[c]==')' && buf_string[a]==',' && buf_string[b]==',') //进行数据格式验证 { return 0; } return 1; } //--------------主函数--------------- void main() { char xm[4]; char ym[4]; char zm[4]; UART_Init(); UART_SendString("开始!"); while(1) { if(flag==1) { for(i=1;i<a;i++) { xm[k]=buf_string[i]; k++; } xm[k]='\0'; k=0; for(i=a+1;i<b;i++) { ym[k]=buf_string[i]; k++; } ym[k]='\0'; k=0; for(i=b+1;i<c;i++) { zm[k]=buf_string[i]; k++; } zm[k]='\0'; k=0; UART_SendString("\r\nX坐标是\r\n ");UART_SendString(xm); UART_SendString("\r\nY坐标是\r\n ");UART_SendString(ym); UART_SendString("\r\nZ坐标是\r\n ");UART_SendString(zm); a=b=c=j=0; flag=0; } while(!flag); } } //------------------------------串口中断------------------------------- void USART() interrupt 4 //标志位TI和RI需要手动复位,TI和RI置位共用一个中断入口 { if(RI) //接受标志位 { ReceiveString(); if(Deal_UART_RecData()) { flag=1; } RI=0; //清接受 } if(TI) //发送标志位 { TI=0; //清发送标志位 busy=0; } } ``` ## 请哪位大佬帮忙看看我哪出问题了?
大神帮帮我,我脑袋都断路了。
单片机利用STC89c52芯片控制定时器让led亮10s就熄灭(不循环,要精确)。
stc io模拟串口接收端
stc12c5a60s2 io模拟串口接收端(Rxd)接收波特率1200bps的数据,在通过单片机实际串口1以波特率9600bps发送到上位机,出现问题只有串口一发送1200bps才能得到正确地数据!求哪里出问题啦 ``#include <reg52.h> #include<stdio.h> #include<string.h> typedef unsigned char uchar; #define F11_0592 uchar tmpbuf2[64]={0}; //用来作为模拟串口接收数据的缓存 struct { uchar recv :6; //tmpbuf2数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中 uchar send :6; //tmpbuf2数组下标,用来将tmpbuf2中的数据发送到串口 }tmpbuf2_point={0,0}; sbit newRXD=P2^2; ////模拟串口的接收端设为P2.2 void UartInit() { SCON=0x50 ; // SCON: serail mode 1, 8-bit UART TMOD|=0x20 ; // TMOD: timer 1, mode 2, 8-bit reload,自动装载预置数(自动将TH1 送到TL1);T0工作在方式1,十六位定时 PCON|=0x80; // SMOD=1 TH1=0xa0; // Baud:9600 fosc=11.0592MHz 9600bps为从串口接收数据的速率 TL1=0xa0; // 计数器初始值,fosc=11.0592MHz 因为TH1一直往TL1送,所以这个初值的意义不大 TR1=1; // 启动TIMER1,用于产生波特率 TH0=0xFF; // 定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps TL0=0xA0 ; // 定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps TF0 = 0; //清除TF0标志 IT0=1 ; //设置外部中断0为边沿触发方式 //TR0=1; } void WaitTF0(void) { TF0=0; while(!TF0); TF0=0 ; //TH0=0xFF; // 定时器重装初值 模拟串口的波特率为9600bps fosc=11.0592MHz // TL0=0xA0; // 定时器重装初值 模拟串口的波特率为9600bps fosc=11.0592MHz } uchar RByte() { uchar Output=0; uchar i=8 ; // TR0=1 ; //启动Timer0 TH0=0xFF; // 定时器重装初值 模拟串口的波特率为9600bps fosc=11.0592MHz TL0=0xA0; // 定时器重装初值 模拟串口的波特率为9600bps fosc=11.0592MHz TF0=0; WaitTF0();//等过起始位 //接收8位数据位 while(i--) { Output>>=1; if(newRXD)Output|=0x80; //先收低位 WaitTF0();//位间延时 } // while(!TF0) if(newRXD) break; //此句和下一句不能加,如果加上了将导致耗时过长,影响下一个字节的接收 // // WaitTF0(); // TR0=0; //停止Timer0 return Output ; } //向COM1发送一个字符 void SendChar(uchar byteToSend)// void SendChar(uchar byteToSend) { SBUF=byteToSend ; while(!TI); TI=0; } void main() { UartInit(); Timer0Init(); while(1) { if(tmpbuf2_point.recv!=tmpbuf2_point.send)//差值表示模拟串口接收数据缓存中还有多少个字节的数据未被处理(发送至串口) { SendChar(tmpbuf2[tmpbuf2_point.send++]); } } } //外部中断0,说明模拟串口的起始位到来了 void Simulated_Serial_Start()interrupt 0 { EX0=0 ; //屏蔽外部中断0 tmpbuf2[tmpbuf2_point.recv++]=RByte();//从模拟串口读取数据,存放到tmpbuf2数组中 IE0=0; //防止外部中断响应2次,防止外部中断函数执行2次 EX0=1 ; //打开外部中断0 }
51单片机TCRT5000红外避障模块
/****************************************** 传感器触发测试 单片机:STC89C52 波特率:9600 *****************************************/ #include <reg52.h> unsigned char date; #define uchar unsigned char #define uint unsigned int sbit key1=P3^1; /* 函数申明 -----------------------------------------------*/ void delay(uint z); void Initial_com(void); //*********************************************************** /* ******************************************************************************** ** 函数名称 : delay(uint z) ** 函数功能 : 延时函数 ******************************************************************************** */ void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } //****************************** //*****串口初始化函数*********** //****************************** void Initial_com(void) { EA=1; //开总中断 ES=1; //允许串口中断 ET1=1; //允许定时器T1的中断 TMOD=0x20; //定时器T1,在方式2中断产生波特率 PCON=0x00; //SMOD=0 SCON=0x50; // 方式1 由定时器控制 TH1=0xfd; //波特率设置为9600 TL1=0xfd; TR1=1; //开定时器T1运行控制位 } //************************* //**********主函数********* //************************* main() { Initial_com(); while(1) { if(key1==0) { delay(); //消抖动 if(key1==0) //确认触发 { SBUF=0X01; delay(200); } } if(RI) { date=SBUF; //单片机接受 SBUF=date; //单片机发送 RI=0; } } } ``` ```51单片机 买了一个TCRT5000红外避障模块,发现它接上电源后一检测到有障碍物LED就亮,都不用加载代码,求问这种模块可以实现特定时间检测到障碍物才亮吗? 附上卖家代码,
怎么把单片机里的data改成xdata存储
/********************************************************************** ----------------1.开发环境:Keil v4 ---------------- ----------------2.使用单片机型号:STC89C52RC ---------------- ***********************************************************************/ #include "main.h" #include "HX711.h" unsigned long HX711_Buffer = 0; unsigned long Weight_Maopi = 0; long Weight_Shiwu = 0; unsigned int Temp_Buffer = 0; //code unsigned char table[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x00}; //0,1,2,3,4,5,6,7,8,9,全暗,全亮 //共阳 code unsigned char table[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X00,0XFF,0x6f,0x79,0x77,0x3f,0x76,0x38}; //0,1,2,3,4,5,6,7,8,9,全暗,全亮,g,e,r,o,h,l //共阴 unsigned char COM1_DATA = 0,COM2_DATA = 0,COM3_DATA = 0,COM4_DATA = 0,COM5_DATA = 0,COM6_DATA = 0; unsigned char flag = 0; bit Flag_ERROR = 0; //校准参数 //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该值可以为小数 #define GapValue 430 //**************************************************** //主函数 //**************************************************** void main() { Init_Timer0(); COM1_DATA = 10; //H COM2_DATA = 15; //E COM3_DATA = 17; //L COM4_DATA = 17; //L COM5_DATA = 13; //0 COM6_DATA = 16; //空 Delay_ms(3000); //延时,等待传感器稳定 Get_Maopi(); //称毛皮重量 while(1) { EA = 0; Get_Weight(); //称重 EA = 1; Scan_Key(); //显示当前重量 if( Flag_ERROR == 1) { COM1_DATA = 13; //E COM2_DATA = 14; //R COM3_DATA = 14; //R COM4_DATA = 15; //O COM5_DATA = 14; //R COM6_DATA = 10; //空 } else { COM4_DATA = Weight_Shiwu/1000; COM3_DATA = Weight_Shiwu%1000/100; COM2_DATA = Weight_Shiwu%100/10; COM1_DATA = Weight_Shiwu%10; COM5_DATA = 10; //空 COM6_DATA = 12; //g } } } //扫描按键 void Scan_Key() { if(KEY1 == 0) { Delay_ms(5); if(KEY1 == 0) { while(KEY1 == 0); Get_Maopi(); //去皮 } } } //**************************************************** //称重 //**************************************************** void Get_Weight() { Weight_Shiwu = HX711_Read(); Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重 if(Weight_Shiwu > 0) { Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); //计算实物的实际重量 if(Weight_Shiwu > 5000) //超重报警 { Flag_ERROR = 1; } else { Flag_ERROR = 0; } } else { Weight_Shiwu = 0; Flag_ERROR = 1; //负重报警 } } //**************************************************** //获取毛皮重量 //**************************************************** void Get_Maopi() { Weight_Maopi = HX711_Read(); } //**************************************************** //初始化定时器0 //**************************************************** void Init_Timer0() { TMOD = 0X01; //T0, 工作模式1 TH0 = (65536 - 2000)/256; TL0 = (65536 - 2000)%256; TR0 = 1; //开启定时器 ET0 = 1; //开启定时器中断 EA = 1; //开启总中断 } //中断函数 //**************************************************** void Timer0() interrupt 1 { TH0 = (65536 - 2000)/256; TL0 = (65536 - 2000)%256; TF0 = 0; flag++; if(flag >= 6) { flag = 0; } switch(flag) { case 0: COM4 = 1; COM5 = 1; COM6 = 1; // if(COM1_DATA < 10) // { // SEG_DATA = table[COM1_DATA]|0x80; ////显示第一位值加小数点 // } // else // { SEG_DATA = table[COM1_DATA]; // } break; case 1: COM4 = 1; COM5 = 1; COM6 = 0; SEG_DATA = table[COM2_DATA]; //显示第二位值 break; case 2: COM4 = 1; COM5 = 0; COM6 = 1; SEG_DATA = table[COM3_DATA]; ////显示第三位值 break; case 3: COM4 = 1; COM5 = 0; COM6 = 0; SEG_DATA = table[COM4_DATA]; //显示第四位值 break; case 4: COM4 = 0; COM5 = 1; COM6 = 1; SEG_DATA = table[COM5_DATA]; //显示第四位值 break; case 5: COM4 = 0; COM5 = 1; COM6 = 0; SEG_DATA = table[COM6_DATA]; //显示第四位值 break; default : break; } } //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void Delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<123;j++); }
甲醛传感器ZE08与ZIGbee串口调试是否有冲突。
1.甲醛传感器设置为主动上传模式与ch340进行串口调试没有显示数据。 2.甲醛传感器接51单片机可以通过串口调试助手和lcd观察数据,但在51上接一个zigbee模块的tx、vcc端口,甲醛传感器就无法正常工作。 51代码: /******************************************************************* *******************STC89C52单片机,11.0592M晶振,1602液晶显示 ***********************第一行显示ppb,第二行显示单位mg/m3 ********************** mg/m3 = ppm*M气体分子量/22.4 → ************************ mg/m3≈ppm*1.3392857≈ppb*0.0013392857 ********************* ze08甲醛模组pin6串联330欧电阻接P30 (也可以不接) ********************************************************************/ #include<reg52.h> #include<intrins.h> #include"delay.h" #include"1602.h" #define uchar unsigned char #define uint unsigned int uchar code table[]={"0123456789"}; uchar UART_Upload[9]; // Upload上传 accord主动 uint ppb_h,ch2o,ch2o_m; uchar accord; void init() { ppb_h=0; } void init_ser() { SCON=0x50; //SCON: 方式1, 8-bit UART TMOD=0x20; //TMOD: timer 1,方式2, 8-bit 自动重装 PCON=0x00; //SMOD=1;串口波特率加倍 TH1=0xfd; // TL1=0xfd; //波特率:9600 11.0592MHz TR1=1;//开定时器1 TI=0; RI=0; EA=1; // //开总中断 ES=1; //串行口中断开 } void main() { LCD_Init(); delayms(5); LCD_Clear(); delayms(5); init_ser(); init(); while(1) { LCD_Write_String(0,0,"CH2O:"); LCD_Write_String(9,0,"ppb"); LCD_Write_String(11,1,"mg/m3"); LCD_Write_String(6,1,"."); LCD_Write_Char(5,0,table[ch2o/1000]); LCD_Write_Char(6,0,table[ch2o%1000/100]); LCD_Write_Char(7,0,table[ch2o%100/10]); LCD_Write_Char(8,0,table[ch2o%10]); LCD_Write_Char(5,1,table[ch2o_m/10000]); LCD_Write_Char(7,1,table[ch2o_m%10000/1000]); LCD_Write_Char(8,1,table[ch2o_m%1000/100]); LCD_Write_Char(9,1,table[ch2o_m%100/10]); LCD_Write_Char(10,1,table[ch2o%10]); } } void serial () interrupt 4 { uchar temp_ppb; if(RI==1) { RI=0; UART_Upload[accord]=SBUF; //串口接收一个数据 accord++; if(accord>8) //九个数据为一组 { accord=0; } if(accord==0) //接收一组数据后进行一次校验和 { //校验7为数据位的和取反加一等于校验值 temp_ppb=~(UART_Upload[1]+UART_Upload[2]+UART_Upload[3]+UART_Upload[4]+UART_Upload[5]+UART_Upload[6]+UART_Upload[7])+1; //校验和 if(temp_ppb=UART_Upload[8]) { ch2o=UART_Upload[4]*256+UART_Upload[5]; ch2o_m=ch2o*13.392857; } } } } ``` ```请教一下大神有什么解决方法
130 个相见恨晚的超实用网站,一次性分享出来
文末没有公众号,只求 点赞 + 关注 搞学习 知乎:www.zhihu.com 大学资源网:http://www.dxzy163.com/ 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:stu
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱  极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件,   选择安装到U盘(按照操作无需更改) 三、重启进入pe系统   1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)     选择需要启
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
java源码分析 Arrays.asList()与Collections.unmodifiableList()
举个栗子 本章示例代码来自java编程思想——17.4.1未获支持的操作——Unsupported类。 import java.util.*; public class Unsupported { static void test(String msg, List&lt;String&gt; list) { System.out.println("--- " + msg
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
Java学习笔记(七十二)—— Cookie
概述 会话技术: 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送资源请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie,把数据存储到客户端 服务器端会话技术:Session,把数据存储到服务器端 Cookie 概念:客户端会话技术,将数据存储到客户端 快速入门: 使用步骤: 创建C
程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
蓝桥杯知识点汇总:基础知识和常用算法
文章目录JAVA基础语法:算法竞赛常用的JAVA API:基础算法待更: 此系列包含蓝桥杯所考察的绝大部分知识点,一共有基础语法,常用API,基础算法和数据结构,和往年真题四部分,虽然语言以JAVA为主,但算法部分是相通的,C++组的小伙伴也可以看哦。所有文章的链接都会在此公布,还有很多没有更新,会持续更新,如果大佬发现文章有错误的地方请指正,我会十分感谢。另外,有什么问题可私信我~ JAVA基础
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
实现简单的轮播图(单张图片、多张图片)
前言 刚学js没多久,这篇博客就当做记录了,以后还会完善的,希望大佬们多多指点。ps:下面出现的都是直接闪动,没有滑动效果的轮播图。 单张图片的替换 原理 1.将几张图片叠在一起,通过改变"display:block"和"display:none"这两个属性实现替换。 (前提:在css中给所有图片加上display:none属性) 2.不用将图片叠在一起,将一个div当做"窗口",通过"of
强烈推荐10本程序员在家读的书
很遗憾,这个鼠年春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 显示当前目录 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mk
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药
Java与Python学习通法(1)和(2)序言和编程语言发展史怎么学
大家好,我是 jacky 朱元禄,很高兴跟大家一起学习 《Java与Python学习通法系列》。 首先,说一下,我为什么要录这个课; 我们都已经知道Java 和 Python的视频教程和书籍,可以说是非常非常多了,那我录制本系列课的意义是什么呢? (1)课程特色一:我想告诉大家学习编程语言是有捷径的,这个捷径就是 理解技术背后的“哲学逻辑”,或者说是“人文逻辑”,相信你听完 jack
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)
由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容! 整理了一份Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。       欢迎大家加入java学习交流社区  点击加入   可获取文中文档       小编推荐:     
Python基础知识点梳理
python基础知识点梳理 摘要: 本文主要介绍一些平时经常会用到的python基础知识点,用于加深印象,也算是对于学习这门语言的一个总结与回顾。python的详细语法介绍可以查看官方编程手册,也有一些在线网站对python语法进行了比较全面的介绍,比如菜鸟教程: python3 教程|菜鸟教程 为了方便聚焦知识点,本文涉及的操作实例并不多,想学好一门语言关键还得自己多编码多实践。 python语
2020年2月全国程序员工资统计,平均工资13716元
趋势 2020年2月,中国大陆程序员平均工资13716元,比上个月增加。具体趋势如图: 各主要程序员城市工资变化 城市 北京,上海,深圳,杭州,广州四地的工资最高。 city 平均工资 最低工资 中位数 最高工资 招聘人数 百分比 北京 18098 3750 15000 45000 20529 9.53% 深圳 16903 5750 15000 37500 30941 14
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
为什么说程序员做外包没前途?
之前做过不到3个月的外包,2020的第一天就被释放了,2019年还剩1天,我从外包公司离职了。我就谈谈我个人的看法吧。首先我们定义一下什么是有前途 稳定的工作环境 不错的收入 能够在项目中不断提升自己的技能(ps:非技术上的认知也算) 找下家的时候能找到一份工资更高的工作 如果你目前还年轻,但高不成低不就,只有外包offer,那请往下看。 外包公司你应该
基于Python的人脸自动戴口罩系统
目录 1、项目背景 2、页面设计 3、器官识别 4、退出系统 1、项目背景 2019年新型冠状病毒感染的肺炎疫情发生以来,牵动人心,举国哀痛,口罩、酒精、消毒液奇货可居。 抢不到口罩,怎么办?作为技术人今天分享如何使用Python实现自动戴口罩系统,来安慰自己,系统效果如下所示: 本系统的实现原理是借助 Dlib模块的Landmark人脸68个关键点检测库轻松识别出人脸五官
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
jQuery实现高仿QQ音乐
几个实现的效果看视频吧: bandicam 2020-02-05 16-28-20-127 动图很是不清楚 github地址奉上:https://github.com/tangmusenLiu/Large-warehouse https://github.com/tangmu
《请停止无效的努力》读书笔记
一、如何快速找到你的天赋优势 1、人的价值定位 1.1、冰山模型 &nbsp; &nbsp; &nbsp; &nbsp; 你能创造多大的价值,离不开三大内在因素: 第一要素:知识和技能,位于冰山显露的部分,是非常显性,容易展示出来的; 第二要素:能力,比如:思考能力、人际交往能力等,需要通过仔细的行为观察才能看出,位于冰山的中间部分; 第三要素:天赋。包括潜在能力、性格特质、动机、价值观等
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
python核心编程:入门Python编程的8个实践性建议
前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触Python编程入门不久,也希望大家少走弯路,多少有些地方可以给大家借鉴。 文章目录1. 项目文件事先做好归档2. 永远不要手动修改源数据并且做好备份3. 做好路径的正确配置4. 代码必要的地方做好备注
动画:《大前端吊打面试官系列》 之原生 JavaScript 精华篇
......更新日志 文中所有修改或补充内容,会在日志中实时更新。 2020/01/7 开始决定写近十几万字前端面试系列,规划整个系列目录提纲。 2020/01/8 写完部分“面试官到底考察你什么”内容。 2020/01/9 继续完善”面试官到底考察你什么“内容。 2020/01/11 开始写准备简历部分。 2020/01/13 完善面试前的准备内容。 2020/01/14 对面试
网络爬虫——Urllib模块实战项目(含代码)爬取你的第一个网站
Urllib模块实战项目什么是Urllib模块Urllib实例1(将内容爬到内存中)Urllib实例2(将内容爬到电脑硬盘中)Urllib实例3(浏览器伪装)Urllib实例4(用户代理池) 之前给大家分享了正则表达式和XPath表达式的内容,有了以上基础今天来给大家带来了网络爬虫实战课程,教大家爬取第一个网站 什么是Urllib模块 Urllib是Python提供的一个用于操作URL的模块,这个
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问