单片机自动调光C语言,C51单片机控制40w调光电源C语言程序
C51单片机控制40w调光电源C语言程序,12M晶振,500Hz 2ms,1000Hz 1ms,300Hz 3.3ms,330Hz 3ms 。3ms为一个周期,30us中断一次,共可以有100次中断, 中断次数n即占空比D,调光分3档,33% 66% 100%。
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/************* 1、红外遥控 *****************/
uchar code table_duan[16]=
{
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71
};
uchar code table_wei[8]=
{
0xE3,0xE7,0xEB,0xEF,
0xF3,0xF7,0xFB,0xFF
};
#define Imax 14000
#define Imin 8000
#define Inum1 1450
#define Inum2 700
#define Inum3 3000
uchar Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
ulong mm,Tc;
uchar IrOK;
uchar ff;
uchar t_display;
/************* 1、红外遥控 *****************/
uchar aa,bb,cc,ss;
#define D33 3 //调光等级
#define D66 7
#define D100 16
uchar D,n,pwmoff,njk,jkdelay,spkn,spkxx,spkm,spkopen,spkclose;
sbit pwm1=P3^0;//外部中断0 P3.2 IR
sbit pwm2=P3^4;
sbit jk4=P3^7; //大
sbit jk3=P1^0; //中
sbit jk2=P1^5; //小
sbit jk1=P1^7; //ON/OFF
sbit spk1=P3^1;
void delay(uint z)
{
uint x,y; //x,y为局部变量,只在当前函数出现并有效
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
//外部中断解码程序
void IR_code(void)interrupt 0 using 1 //P3^2 外部中断0
{
Tc=TH0*256+TL0; //提取中断时间间隔长
TH0=0;
TL0=0;
if(Tc>Imin&&Tc
{
mm=0;
ff=1;
return; //直接跳出中断,无返回值 (不执行下个if)
}
if(ff==1) //ff=1找到启始码
{
if(Tc>Inum1&&Tc
{
Im[mm/8]=Im[mm/8]>>1|0x80; // | 按位“或” 0x80=10000000
mm++;
}
if(Tc>Inum2&&Tc
{
Im[mm/8]=Im[mm/8]>>1; //取码
mm++;
}
if(mm==32)
{
mm=0;
ff=0;
if(Im[2]==~Im[3])
{
IrOK=1;
}
else {IrOK=0;} //取完码后判断读码是否正确
}
///准备读下一码
}
}
//定时中断1
void timer1() interrupt 3 using 2 //定时器1中断
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
t_display++;
n++;
if(n==16)
n=0; //n=16时周期约3.3ms,300Hz
if(spkopen==1) //开蜂鸣器
{
spk1=0;
spkn++;
if(spkn==150) //响一次
{
spkn=0;
spk1=1; //关蜂鸣器
spkm--; //响的次数spkm
if(spkm==0)
{
spkopen=0;
spkclose=0;
}
else {spkopen=0; spkclose=1; }
}
}
if(spkclose==1)
{
spkn++;
if(spkn==150)
{
spkopen=1; //开蜂鸣器
spkclose=0;
}
}
if(jkdelay==1)
{
njk++;
if(njk==150)
{
njk=0; //n=150时约30ms,继电器安全动作时间
switch (spkxx)
{
case 0x1c:jkdelay=0;jk2=0;jk1=0;
break;
case 0x0d:jkdelay=0;jk3=0;jk1=0;
break;
case 0x0e:jkdelay=0;jk4=0;jk1=0;
break;
default:
break;
}
} }
if(aa==1)
bb++; //第二步,去抖计数。
}
void start()
{
t_display=0;
aa=0;
bb=0;
cc=0;
ss=0;
}
void pwm()
{
if(pwmoff==0)
{
if(n<=D)
{
pwm1=0;
pwm2=0;
}
if(n>D)
{
pwm1=1;
pwm2=1;
}
}
}
void main()
{
delay(100);
pwm1=1;//
pwm2=1;//
jk4=1; //大
jk3=1; //中
jk2=1; //小
jk1=1; //ON/OFF
spk1=1;
D=D100;
start();
mm=0;
ff=0;
IT0=1; //外部中断0下降沿触发
EX0=1; //开外部中断0 P3^2 外部中断0 ,P3^3 外部中断1
EA=1; //开总中断
TMOD=0x11; //0x11=00010001 设置T0、T1为16位定时器
TH0=0;
TL0=0;
TR0=1; //开T0计时
TH1=(65536-100)/256;
TL1=(65536-100)%256;
ET1=1;
TR1=1;
while(1)
{
if(IrOK==1)
{
show[1]=Im[2]&0x0f; //取键码的低四位 0x0f=00001111;
show[0]=Im[2]>>4; //取键码的高四位
if(Im[2]==spkxx)
{spkm=2;} //设置蜂鸣器响的次数
else {spkm=1;}
switch (Im[2])
{
case 0x04:spkopen=1;pwmoff=1;pwm1=1;pwm2=1; //关灯
break;
case 0x10:spkopen=1;pwmoff=0;D=D33;
break;
case 0x0a:spkopen=1;pwmoff=0;D=D66;
break;
case 0x03:spkopen=1;pwmoff=0;D=D100;
break;
case 0x48:spkopen=1;jk1=1; //关电机 其实3个继电器就能搞定了jk2=0;jk3=0;jk4=0;
break;
case 0x1c:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
break;
case 0x0d:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
break;
case 0x0e:spkopen=1;jkdelay=1;jk2=1;jk3=1;jk4=1;
break;
default:
break;
}
IrOK=0;
spkxx=Im[2];
Im[2]=0xff;
}
pwm();
}
}
单片机自动调光C语言,C51单片机控制40w调光电源C语言程序相关推荐
- c语言c51单片机点亮8个灯,单片机课程设计-8个LED灯来回点亮
<单片机课程设计-8个LED灯来回点亮>由会员分享,可在线阅读,更多相关<单片机课程设计-8个LED灯来回点亮(20页珍藏版)>请在人人文库网上搜索. 1.目录第一章 绪论-3 ...
- 万年历单片机c语言,c51单片机万年历的c程序
求一个单片机可以显示阳历的年.月.日.星期.小时.分.秒.阴历也能显示,标明是否为闰年. 用LCD液晶显示,可以调整时间..... 这有个数码管显示的程序 以前做的,.. 你可以在我这个程序上修改修 ...
- 单片机汽车转向灯c语言,C51单片机嵌入式系统设计1——模拟汽车转向灯
之前用了两节课时间测试开发环境,从这节课开始完成一些简单的作品. 实验目的: 1.深入掌握使用单片机各个I/O口的输入输出功能 2.了解汽车灯光控制器的控制需求 3.进一步熟悉延时的编写方法 实验元件 ...
- 单片机唱祝你平安c语言,C51单片机蜂鸣器祝你平安音乐
#include "reg52.h" unsigned char Count; sbit _Speak =P1^5 ; unsigned char code SONG[] ={ ...
- 51单片机喇叭c语言,c51单片机io口直接驱动喇叭,播放《挥着翅膀的女孩》.....
#include #include #include main() { InitialSound(); Play(Music_Girl,0,2,350); while(1) { } } //挥着翅膀的 ...
- C51单片机与PCF8591模块的交互:C语言源码解析
目录 1. PCF8591模块简介 2. C51单片机与PCF8591的连接 3. C51单片机与PCF8591的C语言源码解析 4. 用法示例 5. 总结 6. 参考文献 在微控制器的世界中,C51 ...
- STC单片机自动下载调试器设计
目录 简介 改进方案 1. 解决思路 2. 电路设计 3. 软件 测试结果 参考文献 简介 在推文<全自动STC下载电路设计>中给出了利用STC单片机的ISP程序自动下载调试板的是设计.使 ...
- 51单片机usb烧录电路_STC51单片机自动ISP下载电路设计 - ch340g单片机下载程序电路原理...
STC51单片机自动ISP下载电路设计 1.51单片机程序下载原理 51单片机程序烧写接口为RXD和TXD,即UART口,这两个接口是通信口,配合不同的芯片可以实现不同的通讯方式.如果连接MAX232 ...
- matlab控制电动机调速,控制电机调速及matlab仿真.doc
控制电机调速及matlab仿真.doc 控制电机调速及matlab仿真 1前言 许多生产机械要求在一定的范围内进行速度的平滑调节,并且要求具有良好的稳态.动态性能.而直流调速系统调速范围广.静差率小. ...
最新文章
- 实现搜索框记录搜索历史_三个案例告诉你:“搜索框”该如何设计?
- 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)
- XDP/eBPF — 架构设计
- Node Opencv Addon
- 一文带你学会基于SpringAop实现操作日志的记录
- 系列TCP/IP协议-动态IP选路协议(008)
- [推举]网络工程师必懂的专业术语
- Spring Cloud与微服务学习总结(11)——spring cloud-openFeign 声明式远程调用总结
- java 分级显示_上级部门与下级部门的分类显示
- git reset与git revert比較
- chrome版本太旧 无法更新 问题解决
- denseNet 详解
- JS base64 加密和 后台 base64解密(防止中文乱码)
- 使用Qt开发中国象棋(七):网络对战
- 基于3DGIS+BIM的智慧园区运维管理平台
- 理性的赌徒-SSD写带宽保持恒稳的秘密
- Hexo博客搭建之PicGo+Github免费图床使用指南
- 游戏逆向-CSGO逆向透视自瞄分析技巧
- abaqus6.10离线版user‘smanual
- 圣诞节用java画一棵圣诞树给你的女友