首页
AI
爬虫
爬虫案例
JS逆向技巧
APP逆向
嵌入式开发
C语言入门视频教程
模电数电
51/52单片机
STM32
Linux嵌入式
文学修养
感动和励志文字
生活哲理
随手乱写
IT计算机
QT学习之路
数据库设计
网站搭建
微信开发
Java
计算机知识
NCRE全国计算机等级考试
编程语言
Web程序设计
关于我们
广告招租
表白网页制作
搜索
登录
搜索
RainFly
明确一个目标,这很重要!
累计撰写
213
篇文章
累计收到
4775
条评论
首页
栏目
首页
AI
爬虫
爬虫案例
JS逆向技巧
APP逆向
嵌入式开发
C语言入门视频教程
模电数电
51/52单片机
STM32
Linux嵌入式
文学修养
感动和励志文字
生活哲理
随手乱写
IT计算机
QT学习之路
数据库设计
网站搭建
微信开发
Java
计算机知识
NCRE全国计算机等级考试
编程语言
Web程序设计
关于我们
广告招租
表白网页制作
51/52单片机
2015-6-4
怎样成为单片机高手
不管出于什么原因学习单片机,成为单片机高手几乎可以说是每一个认真学单片机高手的愿望。 单片机高手的秘诀 1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。 2.别小家子气,买本书几十块都舍不得,你还学个 P。为了省钱看电子书,浪费的时间绝对超过书的价值。当然如果查资料,只能看 PDF。 3.学习新的开发软件时,一定要看帮助手册。买的书不够全面。刚接触一个软件,什么都不懂,就盲目的问东问西,让人看起来很幼稚。 4.不要蜻蜓点水,得过且过,细微之处往往体现实力。 5.把时髦的技术挂在嘴边,还不如把过时的技术记在心里。 6.看得懂的书,请仔细看;看不懂的书,请硬着头皮看。别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍。 7.多实践,去焊板子、调试,去写去调,只用软件模拟,是永远成不了高手的。 8.保存好你做过的所有的源程序、PCB、原理图等----那是你最好的积累之一。 9.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会自己找答案,比google、百度都是很好的搜索引擎,你只要输入关键字就能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒! 10 到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问题早就 有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己的帖子没人回的。 11,虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方,如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你讨论呢。 什么样的人是浮躁的人? 浮躁的人容易问:我到底该学什么; --踏踏实实的学点基本的吧?单片机不知道是什么就想去学 ARM?c 语言不会想搞 LINUX?别老是好高骛远。 浮躁的人容易问:谁有 xxx 源码?--(你给人家多少钱啊?自己的劳动白送你?) 浮躁的人容易说:跪求 xxx---(就算网络也要点尊严吧?) 浮躁的人容易说:紧急求救---(其实只是个简单的课程设计) 浮躁的人容易说:有没有 xxx 中文资料?---一个字:懒。别说别的。E 文不行?谁不是从 ABC 学起的啊? 浮躁的人容易说:求 xxx,我的 email 是 xxx@xxx.com,然后消失 ---- 你以为你是大爷啊,人 家请你吃饭,还要喂到你口里不成? 浮躁的人容易问:做单片机有钱途吗----只是为了钱,搞不好技术的,你去抢银行好了。 浮躁的人容易说:哪里有 xxx 芯片资料?(其实大部分资料网络上都有,但是偏偏来找人 问,懒!) 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个高手。 学好单片机之后 基于单片机在各行各业的广泛应用,社会对单片机越来越重视,高校也纷纷开设单片机课程。 学好单片机可以让你在电子行业内找到一个比较好的工作。 学好单片机可以让你增加对电子产品的了解,扩展产品开发的思路,提高社会竞争力
2015年-6月-4日
11703 阅读
0 评论
51/52单片机
2015-5-26
74HC595芯片解析图和C51源程序
#include<reg51.h> #include<intrins.h> sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4; void Hc595SendByte(unsigned char dat); void Delay10ms(unsigned int ) ; void main() { unsigned char ledNum; ledNum=0xfe; while(1) { Hc595SendByte(ledNum); ledNum=_cror_(ledNum,1); Delay10ms(50); } } /******************************************************************************* * 函数名 : Hc595SendByte(unsigned char dat) * 函数功能 : 想74H595发送一个字节的数据 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void Hc595SendByte(unsigned char dat) //74HC595调用函数 { unsigned char a; SRCLK=1; RCLK=1; for(a=0;a<8;a++) { SER=dat>>7; dat<<=1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } RCLK=0; _nop_(); _nop_(); RCLK=1; } /******************************************************************************* * 函数名 : Delay10ms * 函数功能 : 延时函数,延时10ms * 输入 : c * 输出 : 无 *******************************************************************************/ void Delay10ms(unsigned int c) //误差 0us { unsigned char a,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); }
2015年-5月-26日
15759 阅读
4 评论
51/52单片机
2015-3-7
测温模块原理图及原程序
这款制作容易能显示正负值的USB口供电单片机+DS18B20测温模块,只使用了6只元件:一片STC12C4052单片机、一个4位一体共阳数码管,一只DS18B20数字温度传感器、一个USB 插口、一个10uf 贴片复位电容、一个10k 的贴片复位电阻。单片机驱动数码管的端口设置成推挽工作方式,这样使用整个显示电路比较简单,数码管段驱动端省去了限流电阻,数码管亮度显示通过程序控制通断时间实现。由于电路比较简单,这里直接给出PCB 图,制作PCB 板时,我使用的是雕刻机雕刻,雕刻好后再用雕刻机钻孔,之后手工去除多余的敷铜。设计温度测量范围是:-9.9~99.9℃,下面是制作过程,文后附有源程序,源程序适合于STC1T 单片机。下图是制作好的实物工作照片及制作过程照片。 附上源程序: //使用单片机内部RC振荡器 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sfr P1M0 = 0x91; sfr P1M1 = 0x92; sfr P3M0 = 0xB1; sfr P3M1 = 0xB2; #define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值 sbit temp=P1^7; sbit LED0=P3^0; //C sbit LED1=P1^4; // 小数点后一位 sbit LED2=P1^3; //个位 sbit LED3=P1^0; // 十位 sbit A=P1^1; sbit B_B=P1^5; sbit C=P3^2; sbit D=P3^4; sbit E=P3^5; sbit F=P1^2; sbit G=P3^1; sbit H=P3^3; //小数点 uchar temp_low,zf,mz; int temp_high; int final_temp; void dm(mz); void delay(uint x) //(x+1)*6微 { while(x--); } void delay_long(uint x) { uint i; while(x--) { for(i=0;i<125;i++); } } void init_ds18b20()//初始化 { temp=1;//复位 delay(6);//稍作延时 temp=0; delay(145);//延时大于480us(520us) temp=1; delay(14);//这个时间不能太长,否则就过了检测信号的时间了 } void read_signal()//读取应答脉冲 { while(temp); while(~temp)//检测到应答脉冲 { delay(7); break; } } bit readbit_ds18b20() { bit b; temp=1; delay(6);//稍作延时 temp=0; delay(2);//保持低最少1us(4us) temp=1; delay(4);//延时15us以后输出数据有效(23us) b=temp; delay(20);//读时间间隙不少于60us(71us) return(b); } void writebyte_ds18b20(uchar b)//写0写1一起完成 { int i,j; uchar btemp; temp=1; for(i=0;i<8;i++) { j=0; btemp=b&0x01; b>>=1; if(btemp==0) { temp=0; delay(18);//保持拉低在60us以上(71us) temp=1; } else { temp=0; j++;//15us 之内拉高 temp=1; delay(18);//整个写时序时间在60us以上(71us)} } } void temp_convert() { init_ds18b20();//初始化read_signal();//读取应答脉冲 delay_long(4); writebyte_ds18b20(0xcc);//跳过验证序列号命令,若单线上有多个ds18b20,则不可用这个命令writebyte_ds18b20(0x44);//启动温度转换命令} char readbyte_ds18b20() { uint i; uchar a,b; b=0; for(i=0;i<8;i++) { a=readbit_ds18b20(); b=(a<<i)|b; } return(b); } uint read_ds18b20() { int y; float yy; init_ds18b20();//初始化read_signal();//读取应答脉冲 delay_long(4); writebyte_ds18b20(0xcc);//跳过验证序列号命令writebyte_ds18b20(0xbbe);//读取内部ROM 的数据temp_low=readbyte_ds18b20();//读数据时低位在前,高位在后temp_high=readbyte_ds18b20(); y=temp_high; y<<=8; y=y|temp_low;//整合为一个int型 yy=y*0.0625;//12位精度为0.0625 y=yy*10+0.5; return(y); } void display(uint x) { uchar sw,gw,xs; sw=x/100; gw=x%100/10; //个位 xs=x%10; //小数 if(zf==1) { sw=11; } else { if(sw==0) { sw=12; } } dm(sw); LED3=1; delay(30); LED3=0; delay(10); dm(gw); LED2=1; delay(30); LED2=0; delay(10); dm(13); LED2=1; delay(10); LED2=0; delay(10); dm(xs); LED1=1; delay(30); LED1=0; delay(10); dm(10); LED0=1; delay(30); LED0=0; delay(10); } void dm(mz) { switch(mz) { case 0:A=0;B_B=0;C=0;D=0;E=0;F=0;G=1;H=1;break; case 1:A=1;B_B=0;C=0;D=1;E=1;F=1;G=1;H=1;break; case 2:A=0;B_B=0;C=1;D=0;E=0;F=1;G=0;H=1;break; case 3:A=0;B_B=0;C=0;D=0;E=1;F=1;G=0;H=1;break; case 4:A=1;B_B=0;C=0;D=1;E=1;F=0;G=0;H=1;break; case 5:A=0;B_B=1;C=0;D=0;E=1;F=0;G=0;H=1;break; case 6:A=0;B_B=1;C=0;D=0;E=0;F=0;G=0;H=1;break; case 7:A=0;B_B=0;C=0;D=1;E=1;F=1;G=1;H=1;break; case 8:A=0;B_B=0;C=0;D=0;E=0;F=0;G=0;H=1;break; case 9:A=0;B_B=0;C=0;D=0;E=1;F=0;G=0;H=1;break; case 10:A=0;B_B=1;C=1;D=0;E=0;F=0;G=1;H=1;break; //C case 11:A=1;B_B=1;C=1;D=1;E=1;F=1;G=0;H=1;break; //- case 12:A=1;B_B=1;C=1;D=1;E=1;F=1;G=1;H=1;break; //不显示 case 13:A=1;B_B=1;C=1;D=1;E=1;F=1;G=1;H=0;break; //小数点 } } void main(void) { P1M0 = 0x00; P1M1 = 0x19; P3M0=0x00; P3M1=0x01; LED0=0; //C LED1=0; // 小数点后一位LED2=0; //个位 LED3=0; // 十位 read_ds18b20(); temp_convert(); delay_long(5); delay_long(2000);//delay(5)就是延时555us while(1) { temp_convert(); delay_long(5); final_temp=read_ds18b20(); if(final_temp<0) { final_temp=-(final_temp-1); zf=1; } else zf=0; display(final_temp); } } 转自:http://user.qzone.qq.com/1211716/main
2015年-3月-7日
10317 阅读
0 评论
51/52单片机