电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 10992|回复: 63

51单片机制作实践

  [复制链接]
发表于 2018-3-9 23:42:51 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
        自学51单片机有1个月左右的时间了,通过这段时间的学习,对单片机的基本操作和编程方法算是有一个基本的认知,本人学习51不为别的,只有两个字,“好玩”!学会了用它做自己想玩的东西,有的人会说,真可笑,什么年代了,想玩的话,只要有钱什么东西买不到,错!买到的东西再好,那不是自己做出来的,只有通过自己学到的知识做自己想要的东西,那才是最好玩的,通过自己的学习,一步步的实践,经历无数次的失败、查资料、反复折腾,到最后的成功,这种喜悦的心情我想只有经历过的人才能体会,说了这些其实还是希望通过此文激励一下大家,科技飞速发展的今天,好玩的东西有很多,唯有学习最快乐!
        好了,说了这么多,说点正经事吧,刚才说到哪了,哦,对了,单片机是吧,好多人会问,单片机究竟能做啥?我来告诉大家,单片机可以这样来理解,只要是与控制电路有关的电路,都可以用单片机来完成,小到儿童玩具、按摩器,大到工厂设备、机器人、导弹和卫星!只是应用场合的不同,单片机的性能也不一样,当然要想达到设计卫星的级别也不是一件容易的是,本人的目的很简单,学会它,用来做自己想要的东西玩,下面是本人用51系列单片机STC8952为核心制作的电水壶控制板,工作过程如下:“接通电源不工作,按下启动键首先做数码管上显示ON,几秒后进入加热状态并显示当前水温,当中途按下停止按键时,加热停止并做数码管显示静态字母OFF,当水温达到100度时,停止加热,并保持数字100不变,同时喇叭里发出;水开了,快来呀!一会儿水烧干了!的语音提醒(我录的 ),虽然看起来不复杂,但也用到了不少关于单片机理论方面的知识,比如按键检测、数码管动态扫描原理、以及各种语句语法的使用等,说实话,改这个电水壶还真没什么意义,但是换个角度想,通过改电水壶我还真学到了好多新的东西,因为做这个板子并不是一帆风顺的,比如为了让刚刚按下启动键的时候显示个“ON”,停留一会儿自动消失,再进入温度检测大循环;按下停止键时显示“OFF”,当温度达到100时,让单片机相应的IO口输出低电平,停止加热,并让数码管锁定当前温度不再变化等等,这些问题对我一个初学而言真的要费一番周折,哪个地方不懂了,就针对哪个地方上百度,看视频,不断的学习,终于做出了我想要的东西。一会儿我把代码发给大家帮我指点指点,比如哪个地方可以有更简便的方法,哪个地方的语法不正确等等,本人感激不尽,本人这个程序里没有解决的BUG也有很多,比如工作中按下停止键显示OFF,然后再按启动键是无效的,真诚的希望师傅们的批评指教!

#include<reg52.h>  
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;
uint temp;
uchar flag1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit jiare=P1^4;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table1[]=
{0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef};
sbit K1=P3^4;
sbit K2=P3^5;
sbit OFF=P1^2;
uchar a;
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void delay(uint count)
{
  uint i;
  while(count)
   {
    i=200;
    while(i>0)
    i--;
    count--;
   }
}
void dsreset(void)
{
  uint i;
  DS=0;
  i=103;
  while(i>0)i--;
  DS=1;
  i=4;
  while(i>0)i--;
}
bit tmpreadbit(void)
{
   uint i;
   bit dat;
   DS=0;i++;
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;
   return (dat);
}
uchar tmpread(void)
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);
  }
  return(dat);
}

void tmpwritebyte(uchar dat)
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
{
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)//write 1
     {
      DS=0;
      i++;i++;
      DS=1;
      i=8;while(i>0)i--;
     }
    else
      {
      DS=0;//write 0
      i=8;while(i>0)i--;
      DS=1;
      i++;i++;
      }
}
}
void tmpchange(void)
{
   dsreset();
   delay(1);
   tmpwritebyte(0xcc);
   tmpwritebyte(0x44);
}
uint tmp()
{
   float tt;
   uchar a,b;
   dsreset();
   delay(1);
   tmpwritebyte(0xcc);
   tmpwritebyte(0xbe);
   a=tmpread();
   b=tmpread();
   temp=b;
   temp<<=8;
   temp=temp|a;
   tt=temp*0.0625;
   temp=tt*10+0.5;
   return temp;
}
void display(uint temp)//显示程序
{
    uchar A1,A2,A2t,A3;
    A1=temp/100;
    A2t=temp%100;
    A2=A2t/10;
    A3=A2t%10;
    dula=0;
    P0=table[A1];//显示百位
    dula=1;
    dula=0;

    wela=0;
    P0=0x7e;
    wela=1;
    wela=0;
    delay(3);

    dula=0;
    P0=table1[A2];//显示十位
    dula=1;
    dula=0;

    wela=0;
    P0=0x7d;
    wela=1;
    wela=0;
    delay(3);

    P0=table[A3];//显示个位
    dula=1;
    dula=0;

    P0=0x7b;
    wela=1;
    wela=0;
    delay(0.5);
}
void main()
{  
  uchar at;
  uint x,y;
  jiare=0;
  if(K1==0)
  {x=300; jiare=1;
  while(x--)  
   {
     for(y=100;y;y--);
  dula=1;
  P0=0x3f;
  dula=0;

  wela=1;
  P0=0x7e;
  wela=0;
  delayms(1);

  dula=1;
  P0=0x37;
  dula=0;

  wela=1;
  P0=0x7d;
  wela=0;
  delayms(1);

  dula=1;
  P0=0x0;
  dula=0;

  wela=1;
  P0=0x7b;
  wela=0;
  delayms(1);
  }
  at=1;}
  else{at=0;}
  while(at)
    {
    do
      {
      tmpchange();
  for(a=10;a>0;a--)
    {   
    display(tmp());
    }
if(temp>=910)  
  { OFF=1;jiare=0;   
  while(1)
  {
  dula=1;
  P0=0x6;
  dula=0;
  wela=1;
  P0=0x7e;
  wela=0;
  delayms(1);
  dula=1;
  P0=0x3f;
  dula=0;
  wela=1;
  P0=0x7d;
  wela=0;
  delayms(1);
  dula=1;
  P0=0x3f;
  dula=0;
  wela=1;
  P0=0x7b;
  wela=0;
  delayms(1);
  if(K2==0)
    {break;}
    }
  }
  else
  {
  OFF=0;
  }
  if(K2==0)
   {OFF=0;jiare=0;
  while(1)  
   {
  dula=1;
  P0=0x3f;
  dula=0;
  P0=0xff;
  wela=1;
  P0=0x7e;
  wela=0;
  delayms(1);

  dula=1;
  P0=0x71;
  dula=0;
  P0=0xff;
  wela=1;
  P0=0x7d;
  wela=0;
  delayms(1);

  dula=1;
  P0=0x71;
  dula=0;
  P0=0xff;
  wela=1;
  P0=0x7b;
  wela=0;
  delayms(1);}
    }  
  }
  while(1);
  }
    if(K1==1)  
  {OFF=0;}
}
001.jpg

002.jpg

003.jpg

004.jpg


评分

参与人数 10威望 +41 金币 +1 评优 +2 幽默 +13 收起 理由
国强电修部 + 6 + 1 谢谢分享,家电维修论坛有您更精彩!
RANDY + 2 谢谢分享,家电维修论坛有您更精彩!
火箭升空 + 3 + 3 再改良一下,可以申请专利!
风中奇缘 + 3 很给力!
谢工 + 5 很给力!

查看全部评分

发表于 2018-3-9 23:57:15 | 显示全部楼层
会单片机真好!
发表于 2018-3-10 00:08:17 | 显示全部楼层

谢谢分享
发表于 2018-3-10 00:52:40 | 显示全部楼层
谢谢分享单片机制作实践
发表于 2018-3-10 00:53:20 | 显示全部楼层
谢谢分享
发表于 2018-3-10 00:57:00 | 显示全部楼层
谢谢楼主分享
发表于 2018-3-10 01:00:46 | 显示全部楼层
会单片机爽
发表于 2018-3-10 01:45:24 | 显示全部楼层
谢谢分享         
发表于 2018-3-10 01:47:14 | 显示全部楼层
学习单片机乐趣多多
发表于 2018-3-10 06:22:24 | 显示全部楼层
谢谢分享。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-11-24 06:36 , Processed in 0.081193 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表