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语言程序相关推荐

  1. c语言c51单片机点亮8个灯,单片机课程设计-8个LED灯来回点亮

    <单片机课程设计-8个LED灯来回点亮>由会员分享,可在线阅读,更多相关<单片机课程设计-8个LED灯来回点亮(20页珍藏版)>请在人人文库网上搜索. 1.目录第一章 绪论-3 ...

  2. 万年历单片机c语言,c51单片机万年历的c程序

    求一个单片机可以显示阳历的年.月.日.星期.小时.分.秒.阴历也能显示,标明是否为闰年.  用LCD液晶显示,可以调整时间..... 这有个数码管显示的程序 以前做的,.. 你可以在我这个程序上修改修 ...

  3. 单片机汽车转向灯c语言,C51单片机嵌入式系统设计1——模拟汽车转向灯

    之前用了两节课时间测试开发环境,从这节课开始完成一些简单的作品. 实验目的: 1.深入掌握使用单片机各个I/O口的输入输出功能 2.了解汽车灯光控制器的控制需求 3.进一步熟悉延时的编写方法 实验元件 ...

  4. 单片机唱祝你平安c语言,C51单片机蜂鸣器祝你平安音乐

    #include "reg52.h" unsigned char Count; sbit _Speak =P1^5 ; unsigned char code SONG[] ={   ...

  5. 51单片机喇叭c语言,c51单片机io口直接驱动喇叭,播放《挥着翅膀的女孩》.....

    #include #include #include main() { InitialSound(); Play(Music_Girl,0,2,350); while(1) { } } //挥着翅膀的 ...

  6. C51单片机与PCF8591模块的交互:C语言源码解析

    目录 1. PCF8591模块简介 2. C51单片机与PCF8591的连接 3. C51单片机与PCF8591的C语言源码解析 4. 用法示例 5. 总结 6. 参考文献 在微控制器的世界中,C51 ...

  7. STC单片机自动下载调试器设计

    目录 简介 改进方案 1. 解决思路 2. 电路设计 3. 软件 测试结果 参考文献 简介 在推文<全自动STC下载电路设计>中给出了利用STC单片机的ISP程序自动下载调试板的是设计.使 ...

  8. 51单片机usb烧录电路_STC51单片机自动ISP下载电路设计 - ch340g单片机下载程序电路原理...

    STC51单片机自动ISP下载电路设计 1.51单片机程序下载原理 51单片机程序烧写接口为RXD和TXD,即UART口,这两个接口是通信口,配合不同的芯片可以实现不同的通讯方式.如果连接MAX232 ...

  9. matlab控制电动机调速,控制电机调速及matlab仿真.doc

    控制电机调速及matlab仿真.doc 控制电机调速及matlab仿真 1前言 许多生产机械要求在一定的范围内进行速度的平滑调节,并且要求具有良好的稳态.动态性能.而直流调速系统调速范围广.静差率小. ...

最新文章

  1. 实现搜索框记录搜索历史_三个案例告诉你:“搜索框”该如何设计?
  2. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)
  3. XDP/eBPF — 架构设计
  4. Node Opencv Addon
  5. 一文带你学会基于SpringAop实现操作日志的记录
  6. 系列TCP/IP协议-动态IP选路协议(008)
  7. [推举]网络工程师必懂的专业术语
  8. Spring Cloud与微服务学习总结(11)——spring cloud-openFeign 声明式远程调用总结
  9. java 分级显示_上级部门与下级部门的分类显示
  10. git reset与git revert比較
  11. chrome版本太旧 无法更新 问题解决
  12. denseNet 详解
  13. JS base64 加密和 后台 base64解密(防止中文乱码)
  14. 使用Qt开发中国象棋(七):网络对战
  15. 基于3DGIS+BIM的智慧园区运维管理平台
  16. 理性的赌徒-SSD写带宽保持恒稳的秘密
  17. Hexo博客搭建之PicGo+Github免费图床使用指南
  18. 游戏逆向-CSGO逆向透视自瞄分析技巧
  19. abaqus6.10离线版user‘smanual
  20. 圣诞节用java画一棵圣诞树给你的女友

热门文章

  1. 容联领衔NLP人才发展标准制定
  2. Flink 中的 EventTimeTrigger 和 ProcessingTimeTrigger 详解
  3. IMX6ULL学习笔记(四) —— uboot 启动流程
  4. Java分布式事务实现Atomikos
  5. 华为设备配置RSVP认证(手工TE FRR)
  6. 这十套练习,教你如何用Pandas做数据分析
  7. coco数据集添加字段和合并数据集
  8. 怎么解决输入框失去焦点以后光标跑到输入框外面去的问题
  9. 找不到 !!! 。。。。
  10. Java程序员必备奇淫巧技篇(上)