用51单片机做的小旋磁美容仪

发布者:alpha11最新更新时间:2012-12-01 来源: 21IC 关键字:51单片机  旋磁美容仪  显示数码管 手机看文章 扫描二维码
随时随地手机看文章
给大家发一个用单片机做的小旋磁美容仪的c语言代码。99分钟可调倒计显示控制关机设置,同时,有蜂鸣器倒数十秒蜂叫及按键时鸣叫,时间显示数码管里有小数点按一秒周期闪烁的程序控制,按键为P1端中的P1。0及P1。1做为行线,P1。2~P1。5为列线,按键分别为开关机,时间加减,占空比调节加减键两组共四个按键,有两路实际输出占空比端口,标号为:hotout  和 xuanout 两个引脚,为数码管显示档位状态,控制时以外部硬件低电平时间长使输出功率大的基准而进行调节,0档时输出为高电平,8档(最高档)时输出为低电平低,其它从1~7档时,以占空比为准。且每一档的增量不是线性的,只为配合外部硬件的启动电平要求,低几档导通量较大些。本程序为单片机网http://www.51hei.com 会员“狼图腾”呕心沥血的的原创作品,所有的c语言代码都已经测试通过,并且做成了成品投入到了实际的使用中,希望能对大家有所帮助有问题可联系作者帮忙处理的。
#include < reg51.H>
#define uint unsigned int
#define uchar unsigned char
#define duan P0
#define ton 2
#define t 20
uchar code tab[]={0x09,0x5f,0x2a,0x1a,0x5c,0x98,0x88,0x1f,0x08,0x18};
sbit xsd_display=P0^3;//小数点的位显示,根据实际情况决定
sbit shila=P2^4;
sbit gela=P2^5;
sbit hotla=P2^6;
sbit xuanla=P2^7;
sbit hotout=P2^0;
sbit xuanout=P2^1;
sbit fmqbit=P2^2;
bit openbit,xsd;//开关机、小数点、加热、旋转标志位
uchar time;      //分钟值
uint d;                //计分钟变量
bit fmq;
uchar hot,hot1,hotoff,hotoff1,hotled; //加热波形处理相关变量
uchar xuan,xuan1,xuanoff,xuanoff1,xuanled; //旋转相关变量
bit biaobit0,biaobit1,biaobit2,biaobit3;// 控制波形占空时的循环条件标志位//以下为延时子程序
void delay(uint a)
{
uchar c,d;
for(c=a;c>0;c--)
  for(d=80;d>0;d--);
}
//以下为显示函数
void display(uchar x,uchar y,uchar k)
{
uchar ge,shi;  //对传递时间函数进行分解
shi=x/10;
ge=x%10; duan=tab[shi];
shila=0;
delay(2);
shila=1; duan=tab[ge];
gela=0;
xsd_display=xsd;
delay(2);
gela=1; duan=tab[y];
hotla=0;
delay(2);
hotla=1; duan=tab[k];
xuanla=0;
delay(2);
xuanla=1;//  duan_display=0xff;
}//以下为变量改变处理程序
void bianlian(uchar xy)
{
switch(xy)
  {
   case 2: d=0;  //有按键按动时即使计数值初始为0
     if(time!=99)
     {
      time++;
     }
     break;   case 3: d=0;   //有按键按动时即使计数值初始为0
     if(time!=0)
     {
      time--;
     }
     break;   case 4: if(hotled!=8)
     {
      hotled++;
      if(hotled==8)
      biaobit0=1;
      else
      biaobit0=0;
      if(hotled==0)
      biaobit1=1;
      else
      biaobit1=0;
       if(hotled<5)
      {
       hot=hot+3;
      }
      else
      {
       hot=hot+ton;
      }      hot1=hot;
      hotoff=t-hot;
      hotoff1=hotoff;
     }
     break;   case 5:if(hotled!=0)
     {  
      hotled--;      if(hotled==8)
      biaobit0=1;
      else
      biaobit0=0;      if(hotled==0)
      biaobit1=1;
      else
      biaobit1=0;      if(hotled<4)
      {
       hot=hot-3;
      }
      else
      {
       hot=hot-ton;
      }      hot1=hot;
      hotoff=t-hot;
      hotoff1=hotoff;
           }
     break;
   case 6:
       if(xuanled!=8)
     {
      xuanled++;      if(xuanled==8)
      biaobit2=1;
      else
      biaobit2=0;
      if(xuanled==0)
      biaobit3=1;
      else
      biaobit3=0;      if(xuanled==1)
      xuan=xuan+6;
      else
      xuan=xuan+ton;      xuan1=xuan;
      xuanoff=t-xuan;
      xuanoff1=xuanoff;
     }
     break;
   case 7:
     if(xuanled!=0)
     {      if(xuanled==1)
      xuan=xuan-6;
      else
      xuan=xuan-ton;      xuan1=xuan;
      xuanoff=t-xuan;
      xuanoff1=xuanoff;
      xuanled--;      if(xuanled==8)
      biaobit2=1;
      else
      biaobit2=0;
      if(xuanled==0)
      biaobit3=1;
      else
      biaobit3=0;     }
   default:break;
  }
}[page]
//以下为按键检测子程序
void key(void)
{
uchar num,num1=0;
uint a;
P1=0xfc;
num=P1;
if(num!=0xfc)
  {   fmqbit=0;    //检测按键有输入键值时使蜂鸣器鸣叫
   if(openbit!=0)
   {
   
    for(a=17;a>0;a--)
     {
      display(time,hotled,xuanled);
     }
   }
   else
   {
    for(a=200;a>0;a--)
    {
     duan=0xfe;   //此处随便加入值
     shila=0;
     gela=0;
     hotla=0;
     xuanla=0;//打开四路数码管位显示控制
     delay(1);
    }
     hotla=1;
     shila=1;
     gela=1;
     xuanla=1;//关闭四路数码管位显示控制
   }
   P1=0xfc;
   num=P1;
   if(num!=0xfc)
    {     P1=0xfe;
     num=P1;
     if(num!=0xfe)
      {
       switch(num)
        {
         case 0xfa: num1=7; break;//旋转减
         case 0xf6: num1=5; break;//hot 减
         case 0xee: num1=3; break;//时间减
         case 0xde:
            if(openbit!=0)
             {
              for(a=40;a>0;a--)
              display(time,hotled,xuanled);
            }
            else
             {
              for(a=400;a>0;a--)
               {
                duan=0xfe;   //此处随便加入值
                hotla=0;
                shila=0;
                gela=0;
                xuanla=0;//打开四路数码管位显示控制
                delay(2);
               }
              hotla=1;
              shila=1;
              gela=1;
              xuanla=1;//关闭四路数码管位显示控制
             }
             openbit=~openbit;//改变开关机标志位                  
                default:break;
        }
     
      }
     else
      {
       P1=0xfd;
       num=P1;
       switch(num)   
        {
         case 0xf9: num1=6; break;
         case 0xf5: num1=4; break;
         case 0xed: num1=2; break;
         default: break;
        }       }
     if(openbit!=0)
     bianlian(num1);//开机即可改变相关变量值,条件为开机后使能    }
  }   P1=0xfc;
}//以下为定时0中断程序,定时时间为50MS
void time0_int(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0; //进入装初值
d++;
fmq=~fmq;
if(d%10==0)
xsd=~xsd;
if(d==1200)
  {
   d=0;
   if(time!=0)
   time--;          //此处停机变量处理已OK了。
   else
   openbit=0;
  
  }
}//以下为定时1中断程序,定时时间为1000US
void time1_int(void) interrupt 3
{
TH1=0xff;
TL1=0xe0;//进入装初值if(openbit!=0)
  {
  
    if(hot1)
  {
   hot1--;
   if(hot1==0)
     {
      hotoff1=hotoff;
      if(biaobit0!=0)
      hotout=0;
      else hotout=1;
     }
  }
  if(hotoff1)
  {
   hotoff1--;
   if(hotoff1==0)
    {
     hot1=hot;
     if(biaobit1!=0)
     hotout=1;
     else hotout=0;
    }
  }  if(xuan1)
  {
   xuan1--;
    if(xuan1==0)
     {
      xuanoff1=xuanoff;
      if(biaobit2!=0)
      xuanout=0;
      else xuanout=1;
     }
  }
 
if(xuanoff1)
  {
   xuanoff1--;
    if(xuanoff1==0)
     {
      xuan1=xuan;
      if(biaobit3!=0)
      xuanout=1;
      else xuanout=0;
     }
  }
  
 
   
}
}
void main(void)
{
P1=0xfc;
openbit=0;//使起始状态为停机等待状态
TMOD=0x11;  //定义定时器工作模式
IP=0x08;   //定时器1设置为最高中断级别
TH0=0x3c;
TL0=0xb0; //进入装初值
TH1=0xff;
TL1=0xe0;//进入装初值
ET0=1;
ET1=1;
EA=1; //定时中断至此全部打开开始运作。
while(1)
{
  hotout=1;
  xuanout=1;//将输出都置为0输出状态,待机状态  TR0=0;
  TR1=0;//将返回的定时器全部关闭,避免不必要的误动作
  duan=0xfe;   //待机时显示的笔段控制
  hotla=0;
  shila=0;
  gela=0;
  xuanla=0;//打开四路数码管位显示控制
  delay(1);  //显示维持时间设定
  hotla=1;
  shila=1;
  gela=1;
  xuanla=1;//关闭四路数码管位显示控制

  if(P1!=0xfc)
  fmqbit=0;
  else fmqbit=1;    //对按键扫描进行检测,得出判断蜂鸣器的鸣叫结果。  key();       //按键检测函数调用
   if(openbit!=0)
   {
   
    d=0;       //秒钟计时值置0状态
    TR0=1;
    TR1=1;
    hot=0;
    hot1=hot;
    hotoff=t-hot;
    hotoff1=hotoff;  //将热控制的初值给予设定       xuan=0;
    xuan1=xuan;
    xuanoff=t-xuan;
    xuanoff1=xuanoff;  //将旋转控制的初值给予设定    biaobit0=0;
    biaobit1=1;
    biaobit2=0;
    biaobit3=1;    hotled=0;   //将热输出显示值及状态设置为0状态
    xuanled=0;   //旋转,效果同上    time=30;   //时间初值设置为30分钟整
    while(openbit!=0)
     {
           key(); //按键检测函数
      if((time==0)&&(d>=1000))
      {fmqbit=xsd;}     //倒计至最后10秒时进行鸣叫
      else
      {
       if(P1==0xfc)
       fmqbit=1;
       else fmqbit=0;    //对按键扫描进行检测,得出判断蜂鸣器的鸣叫结果。
      }
      display(time,hotled,xuanled);//调用显示函数
     }
   }
}}
  与hotandxuan10区别于bing1 和bing0两个变量取消,同时定时中断1的程序体全部加以代码优化,解决掉原程序执行过程中中断停留时间过长,影响数码管显示,闪烁的问题,同时处理掉按键在开至最高档时检测灵敏度下降问题.

关键字:51单片机  旋磁美容仪  显示数码管 引用地址:用51单片机做的小旋磁美容仪

上一篇:单片机定时器0工作模式1
下一篇:通过51单片机来控制直流电机

推荐阅读最新更新时间:2024-03-16 13:14

任务11:“数码管”的静态显示和动态显示
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍“数码管”的静态显示和动态显示。 一、人眼的视觉暂留效应 二、数码管的静态显示 三、74HC138内部工作原理 四、数码管的动态显示 #ifndef NIXIETUBE_CONFIG_H_ #define NIXIETUBE_CONFIG_H_ #define NIXIETUBE_PORT PORTB #define NIXIETUBE_DDR DDRB #define NIXIETUBE_HC595_CLOCK BIT1 #def
[单片机]
任务11:“<font color='red'>数码管</font>”的静态<font color='red'>显示</font>和动态<font color='red'>显示</font>
8-基于51单片机的羽毛球计分器
具体实现功能 系统由STC89C52单片机+超声波测距传感器(HC-SR04)+DS18B20温度传感器+LCD1602液晶显示屏+按键+蜂鸣器+电源构成 具体功能:1、LCD1602液晶显示测量的距离和温度; 2、测量范围0.02m~4m,精度为0.01m; 3、可以设置距离报警上下限值;按键功能:加键,减键,设置键 4、超过设定的报警上下限值则开始声光报警。 设计分析 根据功能要求及设计成本,控制系统选用AT89C51芯片。采用按钮开关实现功能控制,按照设计的功能模块共选用8个按钮开关,分别实现启动、A队加分、A队减分、B队加分、B队减分、暂停、停止、清零功能。时钟电路由晶体振荡器、晶振控制芯片和电容组成,
[单片机]
8-基于<font color='red'>51单片机</font>的羽毛球计分器
51单片机IO口模拟串口通讯4
硬件环境:STC89C52 软件环境:IDE Keil uVision V4.10 编译器 C51 V9.0 代码如下: /********************************************** 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 波特率:9600 描述:这是网上《51单片机模拟串口的三种方法》中附的程序 占用定时器0 时间:2012.07.25 于单位 **********************************************/ #include reg52.h sbit BT_SND =P1^1; sbit B
[单片机]
51单片机与计算机进行通信的实现方法
51单片机 与计算机 通信 首先我们先来了解一下51单片机与计算机进行通信的实现方法。先来看一个实现这个功能的基本电路。 图中的P1就是 仿真 用的一个串口 接口 ,这个仿真电路要实现与计算机通信功能需要用到其他两个软件,一个是虚拟串口驱动软件,另外一个是串口助手软件,这两个软件在网上都很容易找到。我使用的是Virtual Serial Port Driver和丁丁串口助手,你也可以使用自己熟悉的软件,如果找不到或使用,安装这两个软件有问题可以私信。 虚拟串口驱动软件安装后配置两个成对的虚拟串口一个对应仿真电路中的串口接口,一个对应在串口助手软件上,这样就相当于将两个软件通过虚拟串口连接在一起了,将他们配置成相同的串口
[单片机]
<font color='red'>51单片机</font>与计算机进行通信的实现方法
单片机最小系统_按键控制数码管显示
单片机最小系统_按键控制数码管显示,这个项目,主要学习单片机的键盘工作原理与显示方面的知识,电子小制作的好课题。键盘电路作为单片机的输入部分,数码显示电路作为单片机的输出部分,由键盘电路通过单片机控制数码管显示电路的八路键控数码管电路。按下S0到S7号按键时,数码管显示立刻显示数字0到7。 电子制作 的好课题下面是单片机最小系统_按键控制数码管显示原理图,实作时,按原理图焊好电路,单片机中写入程序。 ORG 0000H ;随后的指令代码从0000H单元开始存放。 LJMP START ;转到标号START处 ORG 0030H ;随后的指令代码从0030H单元开始存
[单片机]
单片机最小系统_按键控制<font color='red'>数码管</font><font color='red'>显示</font>
从零开始51单片机教程 —— 29 单片机音乐程序设计
利用单片机音乐程序设计 利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存
[单片机]
从零开始<font color='red'>51单片机</font>教程 —— 29 单片机音乐程序设计
51单片机GPIO结构框图与工作原理
前言 不论学习什么单片机,最简单的外设莫过于IO 口的高低电平控制,本教程将向大家介绍如何在创建好的工程模板上通过操作51 单片机的GPIO 口输出高低电平。 一、GPIO 概念 GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。51 单片机芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。不过GPIO 最简单的应用还属点亮LED 灯了,只需通过软件控制GPIO 输出高低电平即可。当然GPIO还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。 我们开发板上使用的51 单片机型号是STC
[单片机]
<font color='red'>51单片机</font>GPIO结构框图与工作原理
51单片机与TLV2548串行A/D的接口设计
O 引言 TLV2548是TI公司生产的12位、多通道、小尺寸、低功耗、高速串行A/D转换芯片,它有一个专与DSP连接的帧同步(FS)信号,故可广泛用于DSP高速数据采集系统中。 MCS-51系列单片机历经了多年的发展,其应用技术已十分稳定可靠。TLV2548尺寸小、接口简单。且这两种芯片都有过上天飞行的经历,因此,可以适用低成本、控制简单、数据处理量不大、可靠性要求较高的航天产品中。 为此,本文将介绍80C32E单片机与TLV2548的接口电路及其控制程序的设计方法。 1 接口电路设计 80C32E与TLV2548的接口电路如图1所示。 TLV2548提供了一个SPI串口。80C32E则采用通用I/O口(P1
[单片机]
<font color='red'>51单片机</font>与TLV2548串行A/D的接口设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved