Register

  • 点击获取
  •   

已有账号直接登录    

公告:

热门文章 怎样成为单片机高手

时间:2015-6-4 作者:RainFly   分类: 51/52单片机   热度: 10846°  评论:0  
时间:2015-6-4   分类: 51/52单片机    热度:10846   评论:0

       不管出于什么原因学习单片机,成为单片机高手几乎可以说是每一个认真学单片机高手的愿望。

单片机高手的秘诀

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 芯片资料?(其实大部分资料网络上都有,但是偏偏来找人 问,懒!) 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个高手。

学好单片机之后

基于单片机在各行各业的广泛应用,社会对单片机越来越重视,高校也纷纷开设单片机课程。 学好单片机可以让你在电子行业内找到一个比较好的工作。 学好单片机可以让你增加对电子产品的了解,扩展产品开发的思路,提高社会竞争力

热门文章 74HC595芯片解析图和C51源程序

时间:2015-5-26 作者:RainFly   分类: 51/52单片机   热度: 14647°  评论:4  
时间:2015-5-26   分类: 51/52单片机    热度:14647   评论:4

#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-3-7 作者:RainFly   分类: 51/52单片机   热度: 8996°  评论:0  
时间:2015-3-7   分类: 51/52单片机    热度:8996   评论:0

       

       这款制作容易能显示正负值的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 

返回顶部    首页    捐赠支持    手气不错    友情链接    关于我们    站长工具    站长介绍    手机版本    后台登陆   
版权所有:雨夜轩    站长:RainFly    特别鸣谢   文章归档   皖ICP备15003600号-1   百度统计
Copyright©2015雨夜轩 Powered by emlog强力驱动 七牛CDN全球加速 360站长联盟安全认证 中国博客联盟荣誉成员 可信赖网站 谷歌地图   百度地图   
页面加载耗时:0.05秒 数据库查询次数:43次
背景设置
$