单片机制作媚眼激活仪的c代码

发布者:太白山人最新更新时间:2012-11-24 来源: 21IC 关键字:单片机  媚眼激活仪  c代码 手机看文章 扫描二维码
随时随地手机看文章

这是一个完整的用51系列单片机做的媚眼激活仪的代码,有这方面需要的朋友可以看看,代码已经测试成功。
/*
项目名称:单片机媚眼激活仪器
相关知识点:单片机驱动发热器件,数码管显示,按键操作等。
程序开发:http://www.51hei.com单片机教程网。
*/
#include < reg51.H>
#define uint unsigned int
#define uchar unsigned char
#define duan P0  //将P1口段显示定义为duan标号
#define keyio P3 //将P3口设为按键检测的端口

uchar time,guannum,guantime1,guantime2;//time为分钟值,光显示时间值
uint b;     //50MS为1次,则1分钟为1200次即可
bit xsd,onandoff;  //小数点闪烁位变量,开关机变量标志位

sbit xuanled=P2^3;
sbit guanled=P2^5;
sbit rfled=P2^7;//三个指示灯位控制
sbit xsdbit=P0^6;// 小数点实际硬件输出引脚定义
sbit gewela=P2^0;//个位数码管位控制
sbit shiwela=P2^1;//十位数码管锁定位控制
sbit guanout=P1^0;//光谱输出
sbit rfout=P1^1;    //RF发热头输驱动
sbit xuanout=P1^2;  //旋磁输出
sbit fmqout=P1^3;


uchar code tab[]={0x48,0xee,0x54,0x64,0xe2,0x61,0x41,0xec,0x40,0x60,0xf7};//数码管段显示编码0~9,待编写
void chushi(void);   //进入主函数时初始化
void key(void);      //按键检测
void display(uchar time);//数码管显示处理程序
void chushi1(void);  //进行大循环函数初始化处理

void delay(uchar num)//延时模块程序
{
  uchar c,d;
   for(c=num;c>0;c--)
     for(d=40;d>0;d--);
}


void main()           //主函数程序体
{
  uchar a;
  chushi();
 
  while(1)
   {
     chushi1();
     key();      //按键检测
  if(keyio!=0xff)
  fmqout=0;
  else fmqout=1;
  if(onandoff!=0)
   {
     for(a=100;a>0;a--)
     {
      duan=tab[10];  //开段显示,显示中间笔段
      gewela=0;
      shiwela=0;
      delay(10);
      gewela=1;
      shiwela=1;
     }
    
           while(onandoff!=0)
         {
           display(time);
           key();
        if(time==0&&b>=1000)
       fmqout=xsd;
        else if(keyio==0xff)
         fmqout=1;
          else fmqout=0;
    
          }
      for(a=200;a>0;a--)
      display(time);
   }
   }
   
}

void time0() interrupt 1
{
  TH0=0x3c;
  TL0=0xb0;
  b++;
  if(b==1200)
   {
   b=0;
   if(time!=0)
    time--;
   else onandoff=0;   //置零标志位
  }

     if(b%10==0)
  xsd=~xsd;        //小数点的位变量按1S的周期进行变化
  if(guannum==2||guannum==3)
   {
    guantime2--;
     if(guantime2==0)
      {
       guantime2=guantime1;
       guanout=~guanout;
      }
   }
}[page]

void chushi(void) //进主MAIN函数体时直接初始化
{
  TMOD=0x01;  //定时器定时模式
  TH0=0x3c;
  TL0=0xb0;
  ET0=1;
  EA=1;
  TR0=1;
  xuanled=1;
  guanled=1;
  rfled=1;   
}

void chushi1(void) //对大循环的初始化
{
 time=30;    //开机时时间初值为30分钟

  guanout=0;   //光谱输出为低电平
 rfout=0;      //RF发热头输驱动为低电平
 xuanout=0;    //旋磁输出低电平
 guannum=0;   //待机时,光谱为0状态

  xuanled=1;
  guanled=1;
  rfled=1;   

    
 duan=tab[10];  //开段显示,显示中间笔段
 gewela=0;
 shiwela=0;
 delay(2);
 gewela=1;
 shiwela=1;
}


void key(void)  //按键检测模块
{
 uchar a,num1;
 keyio=0xff;
 if(keyio!=0xff)
  {
 fmqout=0;
   if(onandoff!=0)
    {
     for(a=100;a>0;a--)
     display(time);
    }
   else
    {  for(a=20;a>0;a--)
        {
         duan=tab[10];  //开段显示,显示中间笔段
        gewela=0;
        shiwela=0;
        delay(2);
        gewela=1;
        shiwela=1;
        }
    }
   if(keyio!=0xff)
    {
     num1=keyio;
     switch(num1)
      {
       case 0xfe: onandoff=~onandoff;       //开关机
          break;

       case 0xfd: b=0;
          if((onandoff!=0)&&(time!=99)) //时间加
           time++;
          break;

       case 0xfb: b=0;
          if((onandoff!=0)&&(time!=0))  //时间减
           time--;
          break;
      
       case 0xf7: if(onandoff!=0)
           {
            xuanout=~xuanout;         //旋磁转动变量变化
            if(xuanout!=0)
             xuanled=0;
            else xuanled=1;
           }
          break;

       case 0xef: if(onandoff!=0)      //光谱输出变量变化
           {
            guannum++;
            if(guannum==4)
            guannum=0;

            if(guannum!=0)
             guanled=0;
            else guanled=1;
          
   if(guannum==1)
    guanout=1;
     else if(guannum==2)
      guantime1=guantime2=15;
       else if(guannum==3)
        guantime1=guantime2=8;
         else guanout=0;

   }
          break;
       case 0xdf: if(onandoff!=0)       //RF发热变量变化
           {
            rfout=~rfout;
            if(rfout!=0)
             rfled=0;
             else rfled=1;
           }
          break;
       default:break;


      }    
    }
   
  }
}


void display(uchar min)//数码管显示模块
{
 uchar ge,shi;
 shi=min/10;
 ge=min%10;

 duan=tab[shi];
 shiwela=0;
 delay(5);
 shiwela=1;

 duan=tab[ge];
 xsdbit=xsd;
 gewela=0;
 delay(5);
 gewela=1;  
}
 

关键字:单片机  媚眼激活仪  c代码 引用地址:单片机制作媚眼激活仪的c代码

上一篇:单片机控制可控硅调光不闪电路+程序
下一篇:关于STC12C5410AD单片机PxM0,PxM1设置的问题

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

变频器工作原理和常用的控制方式
  变频调速技术是现代电力传动技术的重要发展方向,而作为变频调速系统的核心—变频器的性能也越来越成为调速性能优劣的决定因素,除了变频器本身制造工艺的“先天”条件外,对变频器采用什么样的控制方式也是非常重要的。本文从工业实际出发,综述了近年来各种变频器控制方式的特点,并展望了今后的发展方向。   1、变频器简介   1.1 变频器的基本结构   变频器是把工频电源(50Hz或60Hz)变换成各种频率的交流电源,以实现电机的变速运行的设备,其中控制电路完成对主电路的控制,整流电路将交流电变换成直流电,直流中间电路对整流电路的输出进行平滑滤波,逆变电路将直流电再逆变成交流电。对于如矢量控制变频器这种需要大量运算的变频器来说,有时还
[单片机]
MCS-51系列单片机在SDH系统中的应用
  摘 要: 介绍了一种采用MCS-51系列兼容的Dallas半导体公司的高速DS80C320作为核心器件实现对复杂SDH系统的管理监控方案,以及系统的软硬件设计和实现。     关键词: 单片机 同步数字序列(SDH) 准同步数字序列(SDH) 同步传递模块(STM) 分插复用器(ADM)     同步数字序列SDH(Synchronous Digital Hierarchy)是一种全新的传输网体制,自从90年代初出现以来,SDH以其各方面的优越性迅速成为通信网络的骨干网络。目前世界各国大多以SDH作为通信的骨干网络。在我国,干线网络也基本采用了SDH网络。     SDH系统与原有PDH(Plesinchr
[应用]
绚丽UI人人爱 MCU图形处理性能与时俱进
不管是消费性电子产品或锁定产业应用的设备,都希望用户接口能更漂亮、绚丽。 毕竟,人是视觉的动物,漂亮的UI总是不会被用户嫌弃的。不过,许多嵌入式装置所使用的微控制器(MCU)只能支持很基本的文字显示,或是很阳春的2D显示功能。有鉴于此,意法半导体(ST)近期发表的新款超低功耗MCU--STM32L4+,便锁定人机接口的设计需求,推出内建图形加速器与大容量SRAM的解决方案,让应用产品开发商可以用更低成本、低功耗的MCU来实现原本要微处理器( MPU)才能支持的华丽UI。 意法半导体STM32产品线经理Bertrand Denis表示,应用开发者对MCU性能、功耗的要求越来越严格。为了响应市场对超低功耗MCU的性能期待,该公司在既有
[半导体设计/制造]
单片机液晶显示器程序
单片机驱动1602液晶显示器的汇编语言程序,大家只要自行更改端口即可在头3行,数据口为P0口,程序已经通过测试 RS EQU P2.0; RW EQU P2.1; E EQU P2.2; ORG 0000H; AJMP MAIN; ORG 0100H; MAIN: MOV P0,#01H; LCALL XRT; MOV P0,#038H; LCALL XRT; MOV P0,#0CH; LCALL XRT; MOV P0,#080H; LCALL XRT; MOV R1,#080H; MOV P0,#01010011B; LCALL W
[单片机]
单片机顺序点亮LED
点亮LED的原理既是给LED二极管一个低电位构成一个回路而使其发光。 在看过电路图后知道LED的接口是P1,就是对P1接口的操作; #include reg52.h #include intrins.h \\这个头文件是因为在后面要用它的函数; unsigned a,b,k,j; void delay() \\延时函数; { for(a=100;a 0;a--) for(b=225;b 0;b--); } void main() { void delay(); //延时函数声明 k=0xfe; //定义K为第一个端口 while (1) //死循环 { j=_crol_(k,1); /
[单片机]
AVR单片机熔丝位锁死简单快捷的解密方法
1.AVR单片机熔丝位锁死简单快捷的解密方法: 在很多AVR单片机的初学者在使用AVR单片机中,很容易把熔丝位弄错而造成单片机锁死,比如说JTAGEN置为1后,单片机的JTAG就不能再下载程序进去了,因此给我们带来很多麻烦。 常见的恢复方法是使用并口编程器来恢复,对于初学者来说,很多设备是很欠缺的,所以很难解决。 现为我们初学者介绍一个简单实用可行的方法 有源晶振恢复法。将被锁死的AVR单片机接入最小系统或者开发板中,将系统中的晶振拆下来,在XAIL1接上有源晶振的第三脚(按下图接即可)。 然后通电,使用ISP下载线进行熔丝位编辑,本人使用智峰p
[单片机]
AVR<font color='red'>单片机</font>熔丝位锁死简单快捷的解密方法
单片机电话单机测试的研制
    摘要: 介绍一种新型的单片机电话电机测试仪的工作原理、实现电路、程序设计和功能。给出了串行数据流在单片机内存中的存储格式及快速处理方法。     关键词: 单片机 串行数据 A/D 测试仪 随着我国电讯业的迅速发展,电话单机需求量激增,为此研制了一种能快速、准确测试电话单机主要性能并对其故障定位的测试仪器。测试仪的特点为:信号方式、接口形式符合有关用户交换机的国家标准;操作方法上符合人们的操作习惯;功能较全、测试速度快、定位准确。 单片机电话测试仪的主要功能为: ·环阻测量:测量用户摘机状态环路接通电阻Ron和挂机状态的漏电流Ioff; ·脉冲拔号测量:包括测量脉冲串的个数、速率、断续比、
[测试测量]
JTAGICE mkII 或是 AVR单片机 的问题
这两天 用 JTAGICE mkII 的 JTAG功能 仿真 一个程序,发现 一个问题,不知 是芯片问题,还是 仿真器的问题。我 是用AVRSTDIO4的GCC 写的 程序,用 JTAGICE mkII 来 仿真,芯片 是 ATmega32。 程序 见 附录,出现的问题是:当 代码 如附录所写 时,程序 运行正常,当 把 函数func()中的代码 直接放到while(1)中,即如下:(原程序 是 用 func() 代替了 几行代码) while(1) { atimer = 0; //清1ms定时标志 atmp = (aclock)/2; if (anum!=atmp ) { anum = atmp; atimer
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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