• 鲁卢
    了解作者
  • C/C++
    开发工具
  • 76KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2020-05-18 14:19
    上传日期
STC MCU控制的LED感应灯源码 按键控制开关
LED感应灯.rar
  • LED感应灯
  • REG51.H
    1.6KB
  • Main_pwd.c
    9.8KB
  • RS232_KEY.PFI
    16B
  • RS232_KEY.hex
    3.2KB
  • Main_UART2_OK.LST
    7.1KB
  • Main_UART2_OK.OBJ
    5.1KB
  • RS232_KEY_Opt.Bak
    854B
  • Main.c
    11.9KB
  • RS232_KEY.IMD
    688B
  • Main.LST
    23.5KB
  • RS232_KEY.WK3
    23KB
  • STC8F2K16S2.H
    18.5KB
  • RS232_KEY.PR
    2KB
  • Main.OBJ
    16.1KB
  • RS232_KEY_Uv2.Bak
    2.1KB
  • RS232_KEY_uvproj.bak
    12.9KB
  • RS232_KEY_uvopt.bak
    54.1KB
  • RS232_KEY.opt.bak
    848B
  • RS232_KEY.IMB
    36KB
  • PCB.h
    1.7KB
  • RS232_KEY.IAD
    568B
  • RS232_KEY.Uv2.bak
    2.1KB
  • RS232_KEY.PS
    237.2KB
  • RS232_KEY.M51
    18.3KB
  • RS232_KEY.plg
    21.7KB
  • RS232_KEY.PRI
    10.4KB
  • RS232_KEY.uvproj
    12.9KB
  • RS232_KEY.uvopt
    54.1KB
  • RS232_KEY.PO
    776B
  • RS232_KEY
    14KB
  • RS232_KEY.lnp
    45B
  • RS232_KEY.IAB
    24KB
内容介绍
//第一种模式:串口2直通,通过电脑控制 //第二种模式:串口2用于串接按键板 //串口发送@00:01$ //返回//RS232: 1 => 01/ //播放完返回END #include "reg51.h" #include "intrins.h" #include "PCB.h" #define FOSC 22118400UL #define BRT (65536 - FOSC / 9600 / 4) //#define BRT (65536 - FOSC / 115200 / 4) sfr AUXR = 0x8e; #define uchar unsigned char //0-255 #define uint unsigned int //0-65535 #define BYTE unsigned char //0-255 #define u8 unsigned char //0-255 #define u16 unsigned int //0-65535 #define u32 unsigned long //======================================================================== // MACRO DEFINE //======================================================================== #define KEY_MAX 7// 16 #define KEY_PRESS_DELAY 15000 #define UART1_BUF_LENGTH 19 #define UART2_BUF_LENGTH 19 #define UART_DATA_OK 2 uint PIR_10S_cnt=0; uint LED_3S_cnt=0; bit LED_flash_falg=1; //======================================================================== // STRUCT DEFINE //======================================================================== typedef struct { u8 busy; u8 flag; u8 len; u8 buff[UART1_BUF_LENGTH]; } _TUART; //======================================================================== // GLOBAL VALUE //======================================================================== _TUART gUart1, gUart2; void LightLED(u8 id); void OffALL(); /*---------------------------------------------------------------------------------- //十六进制转ASCII函数 ----------------------------------------------------------------------------------*/ unsigned char HEX2ASCII(unsigned char dat) { dat &= 0x0f; if(dat <= 9) return (dat + '0'); //数字0~9 return (dat - 10 + 'A'); //字母A~F } ///*---------------------------------------------------------------------------------- //delay 函数 //----------------------------------------------------------------------------------*/ void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=200;y>0;y--); //delay 0.2ms 12T 12M y=200 } //----------------------------------------------------------------------------------*/ void UartInit() { /********定时器1做串口1波特率发生器***发送接收*测试OK***************/ /* SCON = 0x50; TMOD = 0x00; TL1 = BRT; TH1 = BRT >> 8; TR1 = 1; AUXR = 0x40; ES = 1; EA = 1; /********定时器2做串口1波特率发生器****发送接收**测试OK***************/ /* SCON = 0x50; T2L = BRT; T2H = BRT >> 8; AUXR = 0x15; ES = 1; EA = 1; /*************定时器2做串口2波特率发生器*****发送接收*测试OK************/ /* S2CON = 0x50; T2L = BRT; T2H = BRT >> 8; AUXR = 0x14; IE2 = 0x01; ES=1; EA = 1; */ /******串口1.2共用定时器1做波特率发生器***发送接收*测试OK*************/ SCON = 0x50; S2CON = 0x50; T2L = BRT; T2H = BRT >> 8; AUXR = 0x14; AUXR|= 0x01; IE2 = 0x01; //使能串口中断 PS=1; //设定串行口为高优先级中断 ES=1; //允许串口中断 EA = 1; /****************************************************************************************/ /* AUXR.0:S1BRS,如果为1那么串口1的波特率发生器为独立波特率发生器,否则为定时器1 AUXR.1:EXTRAM,为1则可以使用内部扩展RAM AUXR.2:BRTx12,为1则独立波特率发生器不分频,否则12分频。 AUXR.3:S2SMOD,为1串口2波特率加倍,否则不加倍 AUXR.4:BRTR,为1则允许独立波特率允许,否则不允许。 AUXR.5:UART_M0x6,为1则串口模式0为2分频,否则为12分频 AUXR.6:T1x12,为1则定时器1不分频,否则12分频 AUXR.7:T0x12,为1则定时器0不分频,否则12分频 */ gUart1.len = 0; gUart1.flag = 0; gUart1.busy = 0; gUart2.len = 0; gUart2.flag = 0; gUart2.busy = 0; return; } //---------- //初始化时间timer0 //---------- void InitTimer0(void) { //AUXR &= 0x7F; //定时器时钟12T模式 //TMOD &= 0xF0; //设置定时器模式 TMOD=0x11; TH0=(65536-50000)/256; //50 ms TL0=(65536-50000)%256; //50 ms TR0 = 1; //启动定时器 ET0 = 1; //使能定时器中断 //EA = 1; } //---------- //初始化时间timer1 //---------- void InitTimer1(void) { //AUXR &= 0x7F; //定时器时钟12T模式 //TMOD &= 0xF0; //TMOD低4位设置为0,高4位不变 //TMOD|=0xf0; //对TMOD的高4位 置1,其他不变 TMOD=0x11; //TH1=(65536-50000)/256; //50 ms //TL1=(65536-50000)%256; //50 ms TL1=0x00; //50 ms TH1=0x4C; //50 ms TR1 = 1; //启动定时器 ET1 = 1; //使能定时器中断 EA = 1; } void SendData1(BYTE dat) { while (gUart1.busy); //等待前一个数据发送完成 gUart1.busy = 1; //清除发送标志 SBUF = dat; //发送当前数据 return; } void SendData2(BYTE dat) { while (gUart2.busy); //等待前一个数据发送完成 gUart2.busy = 1; //清除发送标志 S2BUF = dat; //发送当前数据 return; } /*-------------------------------------------------------------------------------- 发送字符串 --------------------------------------------------------------------------------*/ void SendString1(char *s) { while (*s) //检测字符串结束标志 { SendData1(*s++); //发送当前字符 } return; } void SendString2(char *s) { while (*s) //检测字符串结束标志 { SendData2(*s++); //发送当前字符 } return; } //======================================================================== // Function : Uart1_Service // Discription : // Parameter : // Return : // Author : // Date : // Remark : //======================================================================== void Uart1_Service() interrupt 4 using 1 { u8 c; if (TI) { TI = 0; gUart1.busy = 0; } if (RI) { RI = 0; c = SBUF; if (UART_DATA_OK > gUart1.flag) { if (0x0d == c) gUart1.flag = 1; else if ((0x0a == c) ||(0x24 == c))gUart1.flag = UART_DATA_OK; gUart1.buff[gUart1.len++] = c; if (UART1_BUF_LENGTH <= gUart1.len) { gUart1.len = 0; gUart1.flag = 0; } } } return; } //======================================================================== // Function : Uart1_Handle // Discription : // Parameter : // Return : // Author : // Date : // Remark : //======================================================================== void Uart1_Handle(void) //连电脑 { u8 i, buff[UART1_BUF_LENGTH]; if (UART_DATA_OK != gUart1.flag) return; for (i=0; i<gUart1.len; i++) buff[i] = gUart1.buff[i]; buff[i] = 0; gUart1.len = 0; gUart1.flag = 0; return; } //======================================================================== // Function : Uart2_Service // Discription : // Parameter : // Return : // Author : // Date : // Remark : //======================================================================== void Uart2_Service() interrupt 8 using 1 { u8 c ; //u8 m,x; //u8 buffs[UART2_BUF_LENGTH]; if ((S2CON & 0x02)) { S2CON &= ~0x02; /*S2CON=S2CON&0xfd 等于把s2con的bit设为0其它位不变*/ /* S2CON &= 0xFD; 跟 S2CON &= ~0x02;完全一样 */ gUart2.busy = 0; } if (S2CON & 0x01) { S2CON &= ~0x01; c = S2BUF; } if ( gUart2.flag<UART_DATA_OK) {
评论
    相关推荐
    • 红外感应路灯程序.rar
      自动红外感应路灯电路程序 非常好用STC单片机
    • STC89C52单片机无线报警控制器
      热释电红外传感器、DF无线数传模块程序参考
    • 51单片机制作的智能感应台灯 仿真和程序源码-电路方案
      本文分享的是基于STC89C51单片机制作的智能感应台灯,使用AD0809进行转换,使用定时器进行计时和闪烁控制,蜂鸣器报警器提示时间。灯光亮度可以调节,分手动模式和自动模式,自动模式下可以自动感应变换亮度。 附件...
    • 51单片机电子称
      里面全方位的蓝牙控制,可以实现人机交互,并且有语音播报单价,模式也有多种可以选择
    • 单片机脉搏计的c程序
      系统以STC89C52单片机为核心,以光电传感器利用单片机系统内部定时器来计算时间,由光电传感器感应产生信号,单片机通过对信号累加得到脉搏跳动次数,时间由定时器定时而得。系统运行中可以通过观察指示闪烁,若...
    • 51单片机通过外部中断检测霍尔感应器程序
      霍尔感应器产生高低电平,利用单片机外部中断来判断感应器转停,从而控制IO口工作
    • 红外智能人体感应灯.zip
      STC89C52 单片机为主控制器,设计具有人体感应的智能灯,本资源为单片机主程序。实现功能为白天由于光照强度高,LED 灯始终处于熄灭状态,到了夜晚,有人...该程序可以配合几个外部模块电路组成红外智能人体感应灯
    • 基于51单片机的GSM短信烟雾报警
      本设计基于STC89C51单片机。 1.采用人体感应模块(热释电模块)检测人体、MQ-2烟雾传感器检测烟雾浓度以及GSM模块构成一套防火防盗报警器设计; 2.开机按下“布防”按键,20s(绿灯闪亮20下)后进入布防状态,当有...
    • 橱柜灯STC单片机控制LED照明程序.rar
      IR、CDS控制下感应发光照明。USB接口可充电,低功耗设计。
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路