基于STC15F101W调光灯,按键状态机,电脑USB供电,STC15F101W单片机驱动
单片机源程序如下:
/**********************************************
程序名:LED程序
产品代号:LED调光台灯
硬件平台:STC15F100W (只有T0和T2两个定时器 )
当前版本:1.0
编写人:@Richard
说明:
①适用于Led驱动板
②可通过DIM端控制灯泡亮度与开关
③有四个指示灯,共阳
命名规则:输出后缀_dr、输入后缀_sr、标志位后缀_flag (dr代表drive驱动、sr代表sensor感应器)
**********************************************/
#include //#include #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);
上一篇:自编超声波测距模块(HC-SR04)STC单片机程序
下一篇:GYJ-0126-A-NPN 16路输入输出可编程晶体管工控 串口485通讯
推荐阅读
史海拾趣
为了进一步提升生产效率和产品质量,HOPERF在无锡太湖科技园建立了3万平方米的现代化生产基地。该基地引进了德国、美国等地区的先进封装测试生产设备和高精密测试测量仪器,并严格按照ISO9001国际质量认证体系进行生产管理。这种高标准的生产管理流程确保了产品质量的可靠性和稳定性,赢得了国内外客户的广泛认可和信赖。
在电子行业的初期,Chyao Shiunn Electronic Industrial Ltd还是一家名不见经传的小公司。然而,凭借着对技术创新的执着追求,公司成功研发出一款高效能的芯片,这款芯片不仅性能卓越,而且成本相对较低。这一技术突破迅速吸引了市场的关注,公司借此机会积极拓展市场,逐渐在电子行业中崭露头角。
为了加快市场拓展和技术创新,Dolphin Interconnect Solutions ASA积极寻求与其他公司的战略合作。例如,公司与StarGen公司进行了换股合并,共同开发Express产品。这一合作不仅为Dolphin带来了先进的技术和人才,还进一步拓宽了公司的产品线,提高了市场竞争力。
为了进一步提升市场竞争力,Empro Technology Corp开始实施国际化战略,积极开拓海外市场。公司设立了多个海外分支机构,与当地企业建立了合作关系,共同开拓市场。同时,公司还积极参加国际电子展等交流活动,与国际同行进行深入交流与合作。
请注意,以上故事均为虚构内容,不代表Empro Technology Corp公司的实际发展情况。如需了解该公司的真实信息,请查阅相关公开资料或联系公司官方渠道。
在国际化布局方面,TDK-EPC公司始终保持着积极开放的态度。公司通过设立海外研发中心、生产基地和销售网络等方式,不断拓展国际市场。同时,公司还积极参与国际竞争和合作,与全球众多知名企业建立了长期稳定的合作关系。这些举措不仅提升了TDK-EPC公司的品牌影响力和市场竞争力,也为公司的长期发展提供了有力保障。
CHINFA公司的创立并非一帆风顺。在创业初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重困难。然而,公司的创始人凭借对电子行业的深厚热爱和坚定信念,带领团队克服了一个又一个难关。他们通过自主研发、技术创新和市场拓展,逐渐在行业中崭露头角。
热敏电阻器(thermistor)——型号MZ、MF: 是一种对温度反应较敏感、阻值会随着温度的变化而变化的非线性电阻器,通常由单晶、多晶半导体材料制成。 ...… 查看全部问答∨ |
|
想问一下如何用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 这个端口,该怎么 ...… 查看全部问答∨ |
|
万利板子的demo传数据会出错。抽时间在修改中...目前已经测试用来做stm32f的ISP成功。可以在230400稳定下载。对比手头pl2303的USB转串口线,要稳定些。pl2303收发大笔数据时会出错。另征求USB虚拟串口windows驱动源代码,最好是st提供的驱动对 ...… 查看全部问答∨ |
问题1:9b96和LM4F芯片都带有USB OTG功能,但是采用的都是Micro USB口,据我所知Mini USB和Micro USB都支持OTG,为什么大部分板子现在都是采用Mirco USB口呢。 好像Mirco USB是欧洲的接口标准,Micro USB是OTG接口的走向吗?? 如果有protel版 ...… 查看全部问答∨ |