51单片机控制多路开关

我想做一个开关 用51单片机控制家庭电源 应该选择什么型号的继电器 还有可以用1个uln2803驱动8个继电器吗 谢谢啦!!!

1个回答

继电器的型号根据你控制电压的等级进行选择,驱动继电器的硬件最好加一级光耦隔离,将控制系统和被控对象隔离,避免被控对象出现问题,损坏控制系统。
具体型号,可以根据电压等级在网上搜一下,比如要控制220v 交流,应选择继电器节点容量大于220v,2倍以上容量,同时也要根据你控制的设备的额定电压以及电流
在选择继电器时电流容量也要大于被控设备的电流。

wzwhahaha
wzwhahaha 谢谢啦!
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
基于51单片机的蓝牙开关
带底板的hc-05蓝牙模块怎么用啊,引脚为start,en,rxd,txd,vcc,gnd,想要做8路的继电器开关,蓝牙模块需要怎样和单片机相连,还有at模式到底是什么,设置后还需要在电路中接vcc吗
89C51单片机设计一个彩灯控制系统,有4个控制开关,8盏LED灯
1.当闭合第1个开关时,8盏灯同时闪烁; 2.闭合第2个开关时,8盏灯从左到右依次被点亮,最后全亮; 3.闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮; 4.闭合第4个开关,8盏灯隔灯闪烁。(控制过程中的时间自己设定;每次只允许一个开关闭合)如果能有硬件设计最好
基于51单片机的蓝牙开关的设计
![图片说明](https://img-ask.csdn.net/upload/201604/26/1461656185_681352.png) 求助!继电器电路是这样的,由P2口控制,低电平继电器闭合,共有8路继电器,以第一路继电器为例,手机端发送1继电器闭合,再发送1继电器断开,但程序弄了半天也没弄明白,求大神给个程序,万分感谢!!!
哥哥们,51单片机问题,小弟求解答呀!
小弟是学软件开发的,分方向学的JAVA,谁知本专业的嵌入式课布置一个作业,用51单片机,一个蜂鸣器,一排开关(4个),一排流水灯(8个)一个数码管(显示1-9)做一个可用的小器具,我的思路是 先用一个开关按下使数码管随机显示1-3的数,然后其他3个开关控制3个灯,如显示2时,按下开关,当亮灯数为2时,蜂鸣器响同时灯熄灭,然后又按下开关取随机数,如上操作,我在单片机方面门都没入,请哥哥们解答一下程序代码,谢谢!!!
51单片机中的串口通信发送10(16进制)以上显示不正确
串口通信中,向单片机发送数据控制LED灯亮实验中 发01,02、04、08 依次是 第1 2 3 4 个灯亮 而发送 10 就成第5 6 个一起亮了,然后发20 、40 是第7 和 第 8 个; 发 80 就全灭了 , 这是啥情况啊。 #include<reg51.h> unsigned char a,flag; void init(); void main() { init(); while(1) { if(flag == 1) { ES = 0; P0 = a; ES = 1; flag = 0; } } } void init() { TMOD = 0x20; TH1 = 0xfa; TL1 = 0xfa; TR1 = 1; // T1开始工作 REN = 1; //允许串口接收 SM0 = 0; SM1 = 1; //选择串口的工作方式 EA = 1; //中断总开关 ES = 1; // 开串口中断 } void ext() interrupt 4 { RI = 0; a = SBUF; flag = 1; } 今天下午调了一下程序: 发现是波特率的问题: 4800 的 波特率 这样设置就有问题 ![图片说明](https://img-ask.csdn.net/upload/201504/05/1428215125_69022.png) 这样设置就没事。 ![图片说明](https://img-ask.csdn.net/upload/201504/05/1428215097_172620.jpg) 不过为啥是这个情况....
编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态。
用AT89C51来完成实验。要求:1.使用P3口作为信号输入口,P1口作为信号输出口。2.若开关节K1接高电平时,八只二极管均处于点亮状态,并持续10秒,开关接低电平时,八只二极管处于交叉两灭状态,并持续5秒3.编写程序的首地址设为4000H。
单片机光耦驱动继电器
做个可控开关 用51单片机 求一个用光耦驱动继电器的电路图(包括光耦与单片机的连接) 光耦型号为pc817 继电器为5v 谢谢啦!!!
89C51单片机,外部中断不响应,一直是高电平。
在学习板P3.3接外部脉冲,脉冲是24V金属接近开关输出信号,用39k、10k电阻分压至5V左右,输入单片机P3.3引脚。用检测外部中断程序测试,中断一直不响应,无论外部脉冲是高、低电平,测量P3.3和GND电压一直是4V多。脉冲输入不进去,请问有人知道这是什么问题吗?
51单片机矩阵键盘与八位共阴数码管问题求指点
目标是实现根据矩阵键盘输入内容显示对应的数字(0到f),如按下S1->S8会显示0->7八个数字,在上述情况下按下S9后会显示1->8八位数,再按下S10后会显示2->9;按S16清除数码管显示内容; 出现问题:当八位数码管都有数字时按下下一个按键后会覆盖最后一位,但第一位不会被移出显示屏;![图片说明](https://img-ask.csdn.net/upload/201703/28/1490663857_889903.jpg)![图片说明](https://img-ask.csdn.net/upload/201703/28/1490663880_521750.jpg)![图片说明](https://img-ask.csdn.net/upload/201703/28/1490663898_329589.jpg) ``` // 内容:如计算器输入数据形式相同 从右至左 使用行列扫描方法 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include <intrins.h> #define KeyPort P2 sbit LATCH = P1^2; //SER 串行数据 sbit SRCLK= P1^1; //SCK 串行时钟信号 sbit SER = P1^0; //ST 锁存输出信号 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[10]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 unsigned char KeyPro(void); void Init_Timer0(void);//定时器初始化 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num,i,j; unsigned char temp[8]; Init_Timer0(); while (1) //主循环 { num=KeyPro(); if(num!=0xff) { if(i<8) { temp[i]=dofly_DuanMa[num]; for(j=0;j<=i;j++) TempData[7-i+j]=temp[j]; } i++; if(i==8)//多出一个按键输入为了清屏 原本应该为8 { i=0; if(j==500) { j=0; num++; if(num==9) num=0; } } } } /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 发送字节程序 ------------------------------------------------*/ void hc595SendByte(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { SRCLK=0; SER=dat&0x80; dat<<=1; SRCLK=1; } } /*------------------------------------------------ 发送双字节程序 595级联,n个595,就需要发送n字节后锁存 ------------------------------------------------*/ void Send2Byte(unsigned char dat1,unsigned char dat2) { hc595SendByte(dat1); hc595SendByte(dat2); } /*------------------------------------------------ 595锁存程序 595级联发送数据后,锁存有效 ------------------------------------------------*/ void Out595(void) { LATCH=1; _nop_(); LATCH=0; } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { static unsigned char i=0; Send2Byte(dofly_WeiMa[i+FirstBit],TempData[i]); Out595(); i++; if(i==Num) i=0; } /*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 //TH0=0x00; //给定初值 //TL0=0x00; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } /*------------------------------------------------ 定时器中断子程序 ------------------------------------------------*/ void Timer0_isr(void) interrupt 1 { TH0=(65536-2000)/256; //重新赋值 2ms TL0=(65536-2000)%256; Display(0,8); // 调用数码管扫描 } /*------------------------------------------------ 按键扫描函数,返回扫描键值 ------------------------------------------------*/ unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫描法 { unsigned char Val; KeyPort=0xf0;//高四位置高,低四位拉低 if(KeyPort!=0xf0)//表示有按键按下 { DelayMs(10); //去抖 if(KeyPort!=0xf0) { //表示有按键按下 KeyPort=0xfe; //检测第一行 if(KeyPort!=0xfe) { Val=KeyPort&0xf0; Val+=0x0e; while(KeyPort!=0xfe); DelayMs(10); //去抖 while(KeyPort!=0xfe); return Val; } KeyPort=0xfd; //检测第二行 if(KeyPort!=0xfd) { Val=KeyPort&0xf0; Val+=0x0d; while(KeyPort!=0xfd); DelayMs(10); //去抖 while(KeyPort!=0xfd); return Val; } KeyPort=0xfb; //检测第三行 if(KeyPort!=0xfb) { Val=KeyPort&0xf0; Val+=0x0b; while(KeyPort!=0xfb); DelayMs(10); //去抖 while(KeyPort!=0xfb); return Val; } KeyPort=0xf7; //检测第四行 if(KeyPort!=0xf7) { Val=KeyPort&0xf0; Val+=0x07; while(KeyPort!=0xf7); DelayMs(10); //去抖 while(KeyPort!=0xf7); return Val; } } } return 0xff; } /*------------------------------------------------ 按键值处理函数,返回扫键值 ------------------------------------------------*/ unsigned char KeyPro(void) { switch(KeyScan()) { case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值 case 0x7d:return 1;break;//1 case 0x7b:return 2;break;//2 case 0x77:return 3;break;//3 case 0xbe:return 4;break;//4 case 0xbd:return 5;break;//5 case 0xbb:return 6;break;//6 case 0xb7:return 7;break;//7 case 0xde:return 8;break;//8 case 0xdd:return 9;break;//9 case 0xdb:return 10;break;//a case 0xd7:return 11;break;//b case 0xee:return 12;break;//c case 0xed:return 13;break;//d case 0xeb:return 14;break;//e case 0xe7:return 15;break;//f default:return 0xff;break; } } ```
初学单片机,学完了串口部分,有一些自己的思考,请大神解答一下,感激不尽
最近在学串口通讯,这是两个单片机之间通信的,有一些问题1.请问书上写的继电器是什么型号的?继电器不是开关吗?为什么用它来发送数据。2.而上位机又指的是什么呢?我百度了,说的都是电脑上的一个软件,为什么要发给上位机呢?给上位机干嘛不直接在主机给上位机数据。3.两个单片机之间的通讯,不应该是互相可以发信息和接收信息吗,那不就不分从机主机了吗。4.我理解单片机通信的意义,是不是一块单片机资源不够用,所以用两块,或者两块以上,只进行数据通讯,这样就可以减轻一块单片机的负担,还有什么其他意义吗?刚学这个部分,所以请大神们别笑我乱想。![图片](https://img-ask.csdn.net/upload/201610/12/1476252067_437011.jpg)
51单片机矩阵键盘的扫描结果返回给主函数的问题
主程序是一个交通灯,现在加了个检测功能。就是4个路口,每个路口用10位的拨码开关检测车辆数量,然后判断是否该减少该路口的红灯时间。 现在问题是:我检测了四个路口的按键信息并返回给主程序,但是四个路口的返回数据发生错乱。 例如:假设初始红灯时间设为10s,东西南北按键信息分别是 1,2,3,4。那接下来东西方向红灯应该只有8s(东西两个数据里取最大的),南北红灯应该只有6s。 但实际上东西红灯时间也减少为6s了。 下面是所有程序:[交通灯程序](http://pan.baidu.com/s/1c1RcjKk "") 谢谢大家
51控制舵机,这样的一段程序怎么让舵机转得慢一点
/*为9克迷你舵机量身打造的精简51程序。开机后舵机有旋转。之后按下按键key1,舵机开始旋转*/ /*欢迎志同道合的朋友私信交流*/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar k; //k表示总时间 因为定时器中断要用到k,所以放在程序头 sbit PWM1=P1^0; sbit key1=P3^7; //舵机启动开关 void init() { TMOD=0X01; TH0=(65536-92)/256; TL0=(65536-92)%256; EA=1; ET0=1; TR0=1; } void jiman20() //51模拟PWM波函数 { static uchar flag=0,j=0; //flag当做PWM高电平变宽/变窄的标志; //j表示高电平持续的时间;k表示总时间.因为重复调用该函数 if(k==200) //第一步:判断计时满20ms. { k=0; //k归零 if(flag==0) //标志为0时,高电平标志增加 j++; else //标志为1时,高电平标志减小 j--; if(j>=25) //当j=25时,高电平持续时间为2.5ms,此时角度为180. flag=1; //必须改变宽/窄标志。 if(j<=0) //当j=0时,高电平持续时间为0ms,此时角度为0. flag=0; //必须改变宽/窄标志。 } if(k<j) //第二步:在20ms判断结束的基础上,输出PWM PWM1=1; //因为每20ms,k就归0.所以能通过判断k<j,输出高电平 else PWM1=0; } void main() { uint i=60000; init(); while(i--) //一开机就让舵机有一个转动 { jiman20(); } while(1) { while(key1==0) //当开关打开,启动定时器,进入转动程序并循环 { TR0=1; jiman20(); } TR0=0; //当开关关闭,关闭定时器,舵机保持最末时刻状 } } void timer() interrupt 1 //定时器计时0.1ms,即模拟PWM是以0.1s为分度, //高电平逐渐增加/减少 { TR0=0; TH0=(65536-92)/256; TL0=(65536-92)%256; TR0=1; k++; }
单片机的实验考核作业
编程设计数字秒表,P3.2口INT0接按健开关,按键按一次时秒表(精度为1MS)开始计时, 按第二次时秒计时停止,数码管显示当前值,按第三次时秒表清零 (要求:秒值在数码管上显示,设晶振为6MHZ) (1)程序框图 (2)源程序(编译通过的C51源程序,并适当注释) (3)设计接线图(以伟福仿真机为例) (4)运行描述(不管结果如何都应描述) 求解!!!
(基于液晶显示的频率计的设计)的程序与仿真图是怎样的?
要求是:以单片机(AT89C51)为核心,对外部信号源的输入频率进行测量.并将该信号频率在液晶上进行显示.当切换开关连接至不同频率的信号源时,液晶上显示的频率应相应发生改变.程序与仿真图最好不同于网上能找到的.
关于基于单片机测功率因数 电压,电流那个protues仿真。
能简单介绍下,测电压,电流,功率开关怎么摆放,测功率因数是不是最高只能0.49?
1602液晶屏一排方格,新手上路求指教
#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^0; //ds18b20 与单片机连接口 sbit RS=P1^1; sbit RW=P1^2; sbit EN=P1^3; sbit p37=P3^6; //流量正常运行接口 sbit p36=P3^7; //温度报警接口 sbit p14=P1^4; //功能按键接口 sbit p15=P1^5; sbit p16=P1^6; uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20}; //0-9 数字和显示无 unsigned long int a; float f,zong; uint tvalue; uchar n1,n2,n3,n4,n5,n6,n7,n8,n9; uchar tflag,d,g,kai,j,j1,j2,b; /************************延时子程序**************************/ void delay (uint z) { int x,y; for(x=z;x>0;x--) for(y=120;y>0;y--) ; } /***************延时 1us 子程序**********************/ void delay_18B20(unsigned int i)//延时 1 微秒 { while(i--); } /***************液晶显示写指令*******************************/ void wr_com(unsigned char com) //写指令 { delay(1); //延时 1ms RS=0; //写命令设置 RW=0; //并行数据的读写 EN=0; //使能为 0 P2=com; //输入命令 delay(1); //延时 1ms EN=1; //使能为 1 delay(1); //延时 1ms EN=0; //使能为 0 } /************液晶显示写数据**************************/ void wr_dat(unsigned char dat)//写数据 { delay(1); //延时 1ms RS=1; //写数据设置 RW=0; //并行数据的读写 EN=0; //使能为 0 P2=dat; //输入数据 delay(1); //延时 1ms EN=1; //使能为 1 delay(1); //延时 1ms EN=0; //使能为 0 } /***********水流量计算程序与数据转换程序******************/ void loop () { uint zong1; if(g==0) //判断时间是否到 { zong=(b/100.0)+zong; //得出总流量的后三位 } g=1; //将标志为为 1 if(zong>=1000) //判断总流量后三位是否大于 1000 { a++; //总流量前六位加 1 zong=0; //后三位清零 } if(a>=1000000) //总流量前六位大于 1 百万 { a=0; //总流量前六位清零 } zong1=(int)zong ; //总流量后三位转换为整形 n9=a/100000; //总流量 9 位全部分配 n8=a%100000/10000; n7=a%10000/1000; n6=a%1000/100; n5=a%100/10; n4=a%10; n3=zong1%1000/100; n2=zong1%100/10; n1=zong1%10; } /*********************水费计算与数据转换************************/ void shuifei() { uchar h1,h2,h3,h4; h4=(j*a)/1000000; //水费显示 h3=(j*a)%1000000/100000; h2=(j*a)%100000/10000; h1=(j*a)%10000/1000; wr_com(0x80+10); //水费显示 wr_dat(0x5c); wr_dat(table[h4]); wr_dat(table[h3]); wr_dat(table[h2]); wr_dat(0x2e); //显示小数点 wr_dat(table[h1]); } /**********************ds1820 复位子程序*****************/ void ds1820rst() { unsigned char x=0; DQ = 1; //DQ 复位 delay_18B20(4); //延时 DQ = 0; //DQ 拉低 delay_18B20(100); //精确延时大于 480us DQ = 1; //拉高 delay_18B20(40); //延时 } /***********ds1820 读数据子程序********************/ uchar ds1820rd() //读数据 { unsigned char i=0; unsigned char dat=0; - 42 - for (i=8;i>0;i--) //读温度 2 进制 8 次 { DQ = 0; //给脉冲信号 dat>>=1; //将温度数据转移到 dat DQ = 1; //给脉冲信号 if(DQ) //数据转换 dat|=0x80; delay_18B20(10); } return(dat); } /**************ds1820 写数据子程序********************/ void ds1820wr(uchar wdata) { unsigned char i=0; for (i=8; i>0; i--) //写数据 2 进制 8 次 { DQ = 0; //给脉冲信号 DQ = wdata&0x01; //数据传送 delay_18B20(10); //延时 DQ = 1; //给脉冲信号 wdata>>=1; //数据移位 } } /*****************ds1820 温度转换程序****************************/ uint read_temp() { uchar a,b; ds1820rst(); //ds1820 复位 ds1820wr(0xcc); //跳过读序列号 - 43 - ds1820wr(0x44); //启动温度转换 ds1820rst(); //ds1820 复位 ds1820wr(0xcc); //跳过读序列号 ds1820wr(0xbe); //读取温度 a=ds1820rd(); //将温度数据给 a b=ds1820rd(); //将温度数据给 b tvalue=b; //将温度数据转移 tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) //是正温度吗 tflag=0; //正温度标志 else { tvalue=~tvalue+1; //负温度,取反加 1 tflag=1; //负温度标志 } tvalue=tvalue*(0.625);//温度值扩大 10 倍,精确到 1 位小数(0.0625) return(tvalue); } /****************ds1820 温度显示子程序*************************/ void ds1820disp( ) { uchar t1,t2,t3,t4; t3=tvalue/1000; //百位数 (0-9 是 0x30-0x39) 温度值放大了十倍 t2=tvalue%1000/100; //十位数 t1=tvalue%100/10; //个位数 t4=tvalue%10; //小数位 if(tflag==1) { wr_dat(0x2d);//负温度显示负号:- } else p37=1; if(t3!=0) { t1=9; t2=9; t3=10; t4=9; p37=0; } if(t2>=4) p37=0; else p37=1; if(tflag==1) { p37=0; //负温度显示负号:- } if(t3==0) { t3=10; //如果百位为 0,不显示 if(t2==0) { t2=10; //如果百位为 0,十位为 0 也不显示 } } wr_dat(table[t3]);//显示百位 wr_com(0x80+3); wr_dat(table[t2]);//显示十位 wr_dat(table[t1]);//显示个位 wr_dat(0x2e); //显示小数点 wr_dat(table[t4]);//显示小数位 } /**********************流量程序*******************************/ void liuliang() { while(d>=2) //时间到? { d=0; //d 清零 b=TH0*256+TL0; //读取频率 TH0=0x00; //计数器清零 TL0=0x00; g=0; //时间标志位 } loop(); //水流量计算程序与数据转换程序 } /**************第一页显示子程序***************************/ void display1() { wr_com(0x80); //温度显示 wr_dat(0x54); //显示 T wr_dat(0x3a); //显示: read_temp(); //读取温度 ds1820disp( ); //温度显示 wr_dat(0x00); //显示° wr_dat(0x43); //显示 C shuifei(); wr_com(0x80+0x40); //水流量(t)显示 wr_dat(0x46); wr_dat(0x4c); wr_dat(0x4f); wr_dat(0x57); wr_dat(0x3a); wr_dat(0x20); wr_dat(table[n9]); wr_dat(table[n8]); wr_dat(table[n7]); wr_dat(0x2e); //显示小数点 wr_dat(table[n6]); wr_dat(table[n5]); wr_dat(table[n4]); wr_dat(0x20); //显示小数点 wr_dat(0x74); wr_dat(0x20); } /**************第二页显示子程序**********************/ void display2() { wr_com(0x80); //温度显示 wr_dat(0x54); //显示 T wr_dat(0x3a); //显示: read_temp(); //读取温度 ds1820disp( ); //温度显示 wr_dat(0x00); //显示° wr_dat(0x43); //显示 C wr_com(0x80+10); //水价显示 wr_dat(table[j2]); wr_dat(0x2e); wr_dat(table[j1]); wr_dat(0x5c); wr_dat(0x2f); wr_dat(0x74); wr_dat(0x20); wr_com(0x80+0x40+5);//水流量(kg)显示 wr_dat(0x20); wr_dat(0x20); wr_dat(table[n4]); wr_dat(0x2e); //显示小数点 wr_dat(table[n3]); wr_dat(table[n2]); wr_dat(table[n1]); wr_dat(0x20); wr_dat(0x6b); wr_dat(0x67); } /*****************控制流量测量的开关程序***********************/ void kaiguan1() { if(p14==0) //按键按下? {delay(2); if(p14==0) { delay(2); p36=~p36; //P3.6 取反 TR0=~TR0; //TR0 取反 while(p14==0);//按键松开 } } } /**************界面切换开关程序********************/ void kaiguan2() { if(p15==0) //按键按下? { delay(2); if(p15==0) { delay(2); kai=~kai; //P3.6 取反 while(p15==0);//按键松开? } } } /*****************水的单价控制开关程序************************/ void kaiguan3() { if(p16==0) //按键按下? {delay(2); if(p16==0) { delay(2); j++; //水价加一 if(j>40) //水价大于 40 j=0; //水价清零 j2=j/10; //水价分位 j1=j%10; while(p16==0);//按键松开? } } } /**********************程序初始化******************************/ void lcd_init () { TMOD=0x15; //设定定时器 0 为计数功能,定时器为 1 为定时功能 TH1=(65536-50000)/256;//定时器 1 赋出值 50ms TL1=(65536-50000)%256; TH0=0x00; //定时器 0 赋初值 0 次 TL0=0x00; EN=0; //液晶使能端为 0 wr_com(0x38); //液晶初始设置 wr_com(0x0c); wr_com(0x06); wr_com(0x01); wr_com(0x40); wr_dat(0x06); //写 CGRAM 写字模 wr_dat(0x09); wr_dat(0x09); wr_dat(0x06); wr_dat(0x00); wr_dat(0x00); wr_dat(0x00); wr_dat(0x00); zong=0; //总流量(带小数点) EA=1; //开启总中断 ET1=1; //开启定时器 1 中断 TR1=1; //开启定时器 1 TR0=0; //开启计数器 0 p16=1; //p16 为 1 p15=1 ; //p15 为 1 p14=1; //p14 为 1 zong=995; //总流量的后三位赋初值 - 50 - a=199999; //总流量的前六位赋初值 j=20; //水价赋初值 j2=2; //水价个位赋初值 j1=0; //水价小数位赋初值 kai=0; } /********************主程序****************************/ void main() { lcd_init(); //初始化显示 while(1) { kaiguan1(); //控制水流量的测量 kaiguan2(); //控制显示界面 liuliang(); //流量测量 if(kai==0) //判断界面开关是否按下 display1(); //显示第一页界面 else { kaiguan3(); //判断水价开关是否按下 display2(); //显示第二页界面 } } } /******************定时器 1 中断**********************/ void time1() interrupt 3 { TH1=(65536-50000)/256;//定时器 1 初值定时 50ms TL1=(65536-50000)%256; d++; //20ms 后 d 加 1 }
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
立即提问