×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-23 发布时间:
|

这是一个完整的用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代码 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向