历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2020年10月14日 | 基于STC15F101W单片机调光灯/按键状态机源程序

发布者:ching80790 来源: 51hei关键字:STC15F101W  单片机  调光灯  按键状态机 手机看文章 扫描二维码
随时随地手机看文章

基于STC15F101W调光灯,按键状态机,电脑USB供电,STC15F101W单片机驱动

单片机源程序如下:

/**********************************************

程序名:LED程序

产品代号:LED调光台灯

硬件平台:STC15F100W (只有T0和T2两个定时器        )

当前版本:1.0

编写人:@Richard



说明:

                ①适用于Led驱动板

                ②可通过DIM端控制灯泡亮度与开关

                ③有四个指示灯,共阳

       

命名规则:输出后缀_dr、输入后缀_sr、标志位后缀_flag    (dr代表drive驱动、sr代表sensor感应器)


**********************************************/


#include                                         //51系列单片机的各种寄存器地址的定义

//#include                                         //51系列单片机的各种寄存器地址的定义

#include "intrins.h"                                //数学定义

#define uchar unsigned char         

#define uint unsigned int           


/*********晶振定时定义*************************/

//#define Fosc        22118400L        //定义主时钟

#define Fosc        12000000L        //定义主时钟

//#define Fosc        11059200L        //定义主时钟

//#define Fosc        5529600L        //定义主时钟

//#define Fosc        24000000L        //定义主时钟


//#define        T1MS        (65536-Fosc/1000)                //T1模式 ,12.00MHZ

#define        T1MS        (65536-Fosc/12/1000)                //T12模式 ,12.00MHZ


//sfr AUXR = 0x80;

/*********按键时间定义*************************/

#define const_key_time_short1  20        //短按的按键去抖动延时的时间

#define const_key_time_long1   400        //长按的按键去抖动延时的时间

/*********PWM定义*************************/

#define        PWM70_H 7                                        //定义PWM高位周期,亮度70%

#define        PWM70_L 3                                        //定义PWM低位周期


#define        PWM40_H 2                                        //定义PWM高位周期,亮度40%

#define        PWM40_L 3                                        //定义PWM低位周期


#define        PWM10_H 2                                        //定义PWM高位周期,亮度10%

#define        PWM10_L 18                                        //定义PWM低位周期

/*********标志位定义*************************/


unsigned int count;                                //定义全局变量用于计时

unsigned int LED_count1;                        //按钮LED中断次数

unsigned int LED_count2;                        //按钮LED中断次数


unsigned char ucKeyLock1=0;                        //按键触发后自锁的变量标志

unsigned char ucShortTouchFlag1=0;         //短按的触发标志


unsigned int  uiKeyTimeCnt1=0;                //按键去抖动延时计数器


unsigned int  LongKeyCnt=0;                 //长按触发次数计数器

unsigned int  ShortKeyCnt=0;                 //短按触发次数计数器

/*********函数申明*************************/

void initial_myself();                                //初始化寄存器以及个别外围要求响应速度快的输出设备

void initial_peripheral();                        //初始化不要求上电立即处理的外围芯片和模块


/*********端口定义*************************/

sbit DIM_dr=P3^5;                                        //定义P3.5为灯泡DIM使能信号


sbit led1_dr=P3^0;                                        //定义P3.0为LED1控制信号

sbit led2_dr=P3^1;                                        //定义P3.1为LED2控制信号

sbit led3_dr=P3^2;                                        //定义P3.2为LED3控制信号

sbit led4_dr=P3^3;                                        //定义P3.3为LED1控制信号


sbit key_sr=P3^4;                                        //定义P3.4为key输入信号


/*********初始化函数***********************/

void initial_myself(void)                        //内部器件初始化       

{

        EA=1;

       

        P3M1=0x00;                                                //定义P3准双向口

        P3M0=0x00;

}

/************T0定时器中断配置函数**********/

void Timer0Init(void)                //1毫秒@12.000MHz

{

        //AUXR |= 0x80;                //定时器时钟1T模式

        AUXR |= 0x84;                //定时器时钟1T模式,T0/T2配置

        TMOD &= 0xF0;                //设置定时器模式

        TL0 = 0x20;                //设置定时初值

        TH0 = 0xD1;                //设置定时初值

        TF0 = 0;                //清除TF0标志

        TR0 = 1;                //定时器0开始计时

       

        ET0 = 1;

}

/************T2定时器中断配置函数**********/

void Timer2Init(void)                //1毫秒@12.000MHz

{

        //AUXR |= 0x04;                //定时器时钟1T模式

        T2L = 0x50;                //设置定时初值

        T2H = 0xFB;                //设置定时初值

        AUXR |= 0x10;                //定时器2开始计时

       

        IE2 |= 0x04;

}

/*********初始化外围*************************/

void initial_peripheral(void)                 //外围器件初始化

{

        DIM_dr=0;                                                //DIM端口初始化、0为灭,1为亮

       

        led1_dr=1;

        led2_dr=1;

        led3_dr=1;

        led4_dr=1;

}

/*********1毫秒延时函数***********************/

void Delay1ms()                //@12.000MHz

{

        unsigned char i, j;


        i = 12;

        j = 169;

        do

        {

                while (--j);

        } while (--i);

}

/*********毫秒延时函数***********************/

void  delay_ms(unsigned char ms)

{

     unsigned int i;

         do{

              i = Fosc / 13000;

                  while(--i)        ;   //14T per loop

     }while(--ms);

}

/*********毫秒延时函数(定时器)***********************/

void DelayNms(unsigned int t)

{

        T2L = 0x20;                //设置定时初值

        T2H = 0xD1;                //设置定时初值

       

    count=t;

     while(count);

}

/***************4个LED开机提示函数***********************/

void led_turn()

{

        led1_dr=0;

        DelayNms(500);

        led2_dr=0;

        DelayNms(500);

        led3_dr=0;

        DelayNms(500);

        led4_dr=0;       

        DelayNms(500);       

[1] [2] [3]
关键字:STC15F101W  单片机  调光灯  按键状态机 引用地址:基于STC15F101W单片机调光灯/按键状态机源程序

上一篇:自编超声波测距模块(HC-SR04)STC单片机程序
下一篇:GYJ-0126-A-NPN 16路输入输出可编程晶体管工控 串口485通讯

推荐阅读

人工智能早就已经成为最热门的赛道,不仅仅是创业公司,重要的科技公司都把人工智能列为自己的重要战略。作为中国最重要的科技公司之一,华为也在10月9日发布了自己的人工智能战略,同时还公布了华为要做的两款人工智能芯片。 华为轮值CEO徐直军在演讲中,把华为的人工智能战略概括为五个方面:投资基础研究;打造全栈方案;投资开放生态和人才培养;把AI...
1、IAP介绍IAP即“in applicatinprogramming”在应用编程的缩写,指MCU可以在系统中获取新代码并对自己重新编程,即改变应用程序。它与我们所熟悉的ISP编程不同, LPC1768 的ISP编程接口为串口1,如果使用其他的串口或其他总线则不能对其进行编程。而我们这里所说的IAP通过下载一段引导程序Bootloader程序,如果我们想要从串口2或网口更新应用程序...
据thisismoney报道,Arm联合创始人Hermann Hauser警告称,若将Arm出售给英伟达,美国将形成技术垄断。Hauser称,基于Arm架构设计的芯片无处不在。收购Arm将意味着Arm不再是“半导体行业的瑞士”,它的知识产权可能会让英伟达成为谷歌、Facebook和亚马逊那样的主导力量。在一封给议会外交事务委员会的信中,Hauser说:“世界上任何一家重要的半导体公司都能...
力 源 半 导 体( 力 源 信 息 全 资 子 公 司, 股 票 代 码 300184) 在 今 日 官 宣, 由 其 自 主 研 发 的 首 款 基 于Cortex-M0+ 内核MCU产品 CW32F030 面世了。这也是力源半导体 CW32F 系列的首款 32 位 MCU。据悉首批供货产品可同时提供 LQFP48、LQFP32 和 TSSOP20 三种封装形式,全面实现 -40℃ ~105℃超宽温度范围和1.65V~5.5V ...

史海拾趣

问答坊 | AI 解惑

延时程序

网上找的,讲的很详细,很适合我这种菜鸟,这对各位来说都是火星小菜了吧.......呵呵,希望大家的技术越来越高! 汇编延时程序算法详解   摘要 计算机反复执行一段程序以达到延时的目的称为软件延时,单片机应用程序中经常需要短时间延时,有时要求 ...…

查看全部问答∨

射频和无线技术入门(第二版)

这本教材是偶找了好久才找到的呃,相当好的呃…

查看全部问答∨

基于DSP技术的QAM调制器设计方案

《基于DSP技术的QAM调制器设计方案》,请随便看看 [ 本帖最后由 stylet 于 2009-8-14 13:53 编辑 ]…

查看全部问答∨

什么是热敏电阻及其主要类型和参数?

热敏电阻器(thermistor)——型号MZ、MF:     是一种对温度反应较敏感、阻值会随着温度的变化而变化的非线性电阻器,通常由单晶、多晶半导体材料制成。              ...…

查看全部问答∨

请问如何用C实现这5行代码的功能

  想问一下如何用C语言实现汇编这个功能 MOV  R0,#8 GO: RLC  A MOV  P3.0,C DJNZ R0,GO unsigned i; sbit P3_0=P3^0; 比如说我想将i=0x14的每一位从左到右依次赋值给 P3.0 这个端口,该怎么 ...…

查看全部问答∨

232转485问题

那个大哥能帮帮忙啊。 我用com口转485通讯能通讯上,而通过USB接口转485不能连接,用485网卡直接连接也不能通讯,各位大哥,谁能帮助解决下,谢谢…

查看全部问答∨

有没有人要stm32f的虚拟串口固件的?

万利板子的demo传数据会出错。抽时间在修改中...目前已经测试用来做stm32f的ISP成功。可以在230400稳定下载。对比手头pl2303的USB转串口线,要稳定些。pl2303收发大笔数据时会出错。另征求USB虚拟串口windows驱动源代码,最好是st提供的驱动对 ...…

查看全部问答∨

【请教TI专家】USB OTG ID线的应用

问题1:9b96和LM4F芯片都带有USB OTG功能,但是采用的都是Micro USB口,据我所知Mini USB和Micro USB都支持OTG,为什么大部分板子现在都是采用Mirco USB口呢。 好像Mirco USB是欧洲的接口标准,Micro USB是OTG接口的走向吗?? 如果有protel版 ...…

查看全部问答∨

制作PCB板时忘记覆铜后果有多大?

前几天由于时间匆忙,PCB交给厂家时忘记覆铜了,现在无法修改了,请问这样会有什么后果?影响大吗?…

查看全部问答∨

请教图中红色圈中的二极管参数

本人是菜鸟,请教大师图中红色圈中的二极管参数,作用?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved