微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机制作媚眼激活仪的c代码

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

时间:11-24 来源:互联网 点击:

这是一个完整的用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==0b>=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;
}
}
}

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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top