• 星星123
    了解作者
  • Visual C++
    开发工具
  • 4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 13
    下载次数
  • 2018-03-13 08:49
    上传日期
休眠,锁键盘,点亮, 按键修改DLAI地址,恢复出厂设置,DALI master上位机分配显示
按键改地址.zip
  • keyboard.c
    23.1KB
内容介绍
#include "stm8s.h" #include "pub.h" #include "dali_cmd.h" #include "dali_regs.h" #include "dali_pub.h" /***************************************************************************** 常量定义 ******************************************************************************/ #define KEY_UNABLE 0x0000 #define KEY1_VALUE 0x0002 #define KEY2_VALUE 0x1000 #define KEY3_VALUE 0x0200 #define tube_light_level 0x88 #define uchar unsigned char #define uint unsigned int #define Dormancy 6000 //定义休眠时间倒计数 #define Extinguish_Tube 0x80 //显示屏关 #define Tube_Light_Level 0x88 //定义数码管亮度等级 #define Lock_Count_Number 1500 //定义上锁时间 unsigned char Long_Press_Flag = 1; //定义长按标记 extern unsigned char Pc_Alloct_flag; unsigned int Pwer_on_Flag; //上电标志位 unsigned int Extinguish_Tube_flag; //60s标志位 unsigned int Extinguish_Tube_count=Dormancy; unsigned int Lock_Keyscan_count=Lock_Count_Number; //15s标志位 unsigned char Ulock_flag_2s; //解锁标志位 unsigned char Flash_flag; //500ms标志位 unsigned char Flash_count; unsigned int addr; unsigned int addr_1,addr_2; //定义地址 unsigned int i_key_value; //按键值 unsigned char c_key_step; //按键步骤 unsigned char c_key_up; //按键去除后计数,要200毫秒才算 unsigned char c_key_count; unsigned char key_frist_times; unsigned char c_key_time; //按键后计时,30秒后锁定键盘 unsigned char KEY_TIMES=2; unsigned int read_key(void); unsigned char c_read_key[3]; u8 key_number; u8 number; u8 key_frist_times; unsigned char equipment_config;//自动分配标志位 /***************************************************************************** 管脚定义及宏定义 ******************************************************************************/ #define DIO_PIN 4 //PD4 #define CLK_PIN 3 //PD3 #define STB_PIN 2 //PD2 #define STB_ON() GPIOD->ODR|= (1<<STB_PIN) #define STB_OFF() GPIOD->ODR&=~(1<<STB_PIN) #define CLK_ON() GPIOD->ODR|= (1<<CLK_PIN) #define CLK_OFF() GPIOD->ODR&=~(1<<CLK_PIN) #define DIO_ON() GPIOD->ODR|= (1<<DIO_PIN) #define DIO_OFF() GPIOD->ODR&=~(1<<DIO_PIN) #define DIO_ENABLE_OUT() GPIOD->DDR|= (1<<DIO_PIN) #define DIO_ENABLE_IN() GPIOD->DDR&=~(1<<DIO_PIN) #define READ_DIO() GPIOD->IDR&(1<<DIO_PIN) void Save_DATA_To_EEPROM(unsigned int EEPROM_add,uchar number);//存储地址和数据 void display(uchar tube_addr,uchar location,uchar x);//输入显示地址和要输出的数字 /***************************************************************************** ******************************************************************************/ //地址数组0-63 const unsigned char A0_A63[64]= { 0x01,0x03,0x05,0x07,0x09,0x0B,0x0D,0x0F, 0x11,0x13,0x15,0x17,0x19,0x1B,0x1D,0x1F, 0x21,0x23,0x25,0x27,0x29,0x2B,0x2D,0x2F, 0x31,0x33,0x35,0x37,0x39,0x3B,0x3D,0x3F, 0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F, 0x51,0x53,0x55,0x57,0x59,0x5B,0x5D,0x5F, 0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F, 0x71,0x73,0x75,0x77,0x79,0x7B,0x7D,0x7F }; uchar correspond_addr(uchar input)//把真实地址转换成显示地址 { uchar temp,End_number; for(temp=0,End_number=63;temp<33;temp++,End_number--) { if( input == A0_A63[temp]) { return temp; //break; } else if(input == A0_A63[End_number]) { return End_number; } } return temp; } void Store_Key_As_Addr(); const unsigned char tube_1[4][2]= { {0x06,0x20},{0x1B,0x30},{0x0f,0x30},{0x06,0x38} }; //0到9数组定义 {0x17,0x18}A const unsigned char tube_2[9][2]= { {0x1F,0x08},{0x06,0x00},{0x1B,0x10},{0x0f,0x10},{0x06,0x18}, {0x0D,0x18},{0x1D,0x18},{0x11,0x18},{0x00,0x00} }; //0到9,F数组定义 {0x1E,0x08} const unsigned char tube_3[11][2]= { {0x1F,0x08},{0x06,0x00},{0x1B,0x10},{0x0f,0x10},{0x06,0x18}, {0x0D,0x18},{0x1D,0x18},{0x07,0x00},{0x1F,0x18},{0x0F,0x18},{0x11,0x18} }; const unsigned char code_data[10][2]= { {0x1F,0x08},{0x06,0x00},{0x1B,0x10},{0x0f,0x10},{0x06,0x18}, {0x0D,0x18},{0x1D,0x18},{0x07,0x00},{0x1F,0x18},{0x0F,0x18} }; void _delay_us(unsigned int i) { while(i--); } void delay_ms(u8 i)//单位1ms { u8 y; for(y=0;y<i;y++) { _delay_us(1000); } } void delay_100ms(u8 i)//单位500ms { u8 y; for(y=0;y<i;y++) { delay_ms(100); } } void send_tm1618_byte(unsigned char c_data) { unsigned char i; for(i=0;i<8;i++) { if(c_data&0x01) { DIO_ON(); } else { DIO_OFF(); } _delay_us(20); CLK_OFF(); _delay_us(20); CLK_ON(); _delay_us(20); c_data=c_data>>1; } } void send_tm1618_command(unsigned char c_com) { STB_ON(); _delay_us(20); STB_OFF(); _delay_us(20); send_tm1618_byte(c_com); } void DALI_I2C_Init(void)//重新上电时,在EEPROM取出键值 { u8 dtr; GPIOD->DDR |= 0x1C; /* Output. 输出GPIOD 234 */ GPIOD->CR1 |= 0x1C; /* PushPull. */ GPIOD->CR2 = 0x00; /* Output speed up to 2MHz. */ send_tm1618_command(0x00); send_tm1618_command(0x40); send_tm1618_command(0xC0); send_tm1618_command(0x88); equipment_config = FLASH_ReadByte(0x43F5);//读出标志位 if(equipment_config== 0)//按键设定地址状态 { Ulock_flag_2s = 1;//上电显示解锁状态 dtr = FLASH_ReadByte(0x43F0); addr_1 = (dtr&0xF0)>>4; addr_2 = dtr&0x0F; Store_Key_As_Addr(); // display(0xC0,1,1); send_tm1618_byte(0x00); send_tm1618_byte(0x00); display(0xC2,addr_1,2); display(0xC4,addr_2,3); //tm1650_set(0x48,Nexie_Tube_Set_Level);//显示屏开,一级亮度 //tm1650_set(0x68,(c_code_7_1[addr_1])); //tm1650_set(0x6A,(c_code_7_2[addr_2])); } if(equipment_config == 1)//上位机自动分配地址状态 { Ulock_flag_2s = 0; Pc_Alloct_flag = 1; dtr = FLASH_ReadByte(0x43F1); addr_1 = (dtr&0xF0)>>4; addr_2 = dtr&0x0F; Store_Key_As_Addr(); display(0xC0,0,1); display(0xC2,addr_1,2); display(0xC4,addr_2,3); //tm1650_set(0x48,Nexie_Tube_Set_Level);//显示屏开,一级亮度 //tm1650_set(0x68,(key_code_8_1[addr_1])); //tm1650_set(0x6A,(key_code_8_2[addr_2])); } //Save_Addr_To_EEPROM(0x18); //addr = FLASH_ReadByte(0x43F0); //addr_1 = (addr&0xF0)>>4; // addr_2 = addr&0x0F; //if(addr_1!=0||addr_1!=1||addr_1!=2||addr_1!=3||addr_1!=4||addr_1!=5||addr_1!=6||addr_1!=0x0F) //{ // addr_1 = 0; // } // tm1650_set(0x68,c_code_8_1[addr_1]); //tm1650_set(0x6A,c_code_8_2[addr_2]); } /****************************************************************************** 功能说明: 处理按键 输入参数: 无 输出参数: 无 返回值: 无 ******************************************************************************/ void display(uchar tube_addr,uchar location,uchar x)//输入显示地址和要输出的数字 { send_tm1618_command(tube_addr);//显示地址 +2 send_tm1618_command(tube_light_level);//数码管亮度等级 if(x==1) { send_tm1618_byte(tube_1[location][0]); send_tm1618_byte(tube_1[location][1]); } if(x==2) { send_tm1618_byte(tube_2[location][0]); send_tm1618_byte(tube_2[location][1]); } if(x==3) { send_tm1618_byte(tube_3[location][0]); send_tm1618_byte(tube_3[location][1]); } } void press_key_handle(unsigned char c_key) { if(c_key==KEY_UNABLE) { return; } switch(c_key) { case 2: addr_1+=1; if(addr_1 == 8) { addr_1 =0; } display(0xC2,addr_1,2); // tm1650_set(0x68,(c_code_7_1[addr_1]));//DIG1
评论
    相关推荐
    • mui-master.zip
      一次开发,可以实现Android和IOS两个平台APP
    • Easyfig-master.zip
      Easyfig为数据基因组比对强大理软件,日常学习工作必需
    • sir-AndroidTools-master.zip
      用于网络请求(接口测试),数据格式化,编码解码
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档
    • SIM800C_MQTT.rar
      使用SIM800C模块,使用MQTT协议,连接中国移动onenet平台,能实现数据的订阅、发布、存储等
    • 卷积神经网络
      这是卷积神经网络的一个实际用例,已经调试好了,能够在matlab上成功运行,适合从事卷积神经网络(CNN)研究的人员学习使用。
    • android从bootloader到launcher启动流程整理
      讲述android 开机流程 从boot rom---bootloader---init--zygote---systemserver---ams 并附上自己整理的每个流程的流程图 ,清晰熟悉android 启动流程
    • 分数阶混沌系统:分数阶混沌系统的数值解。-matlab开发
      该工具箱包含可用于模拟一些著名的分数阶混沌系统的函数,例如: - 陈的系统, - Arneodo的系统, - Genesio-Tesi 的系统, - 洛伦兹系统, - 牛顿-莱普尼克系统, - 罗斯勒的系统, - Lotka-Volterra系统, - 达芬的系统, - 范德波尔的振荡器, -伏打的系统- 陆氏系统, - 刘的系统, - Chua的系统, - 金融系统, - 3 细胞 CNN。 这些函数以数值方式计算描述混沌系统的分数阶非线性微分方程的解。 每个函数返回总模拟时间的状态轨迹(吸引器)。 更多详情请看书: Ivo Petras,分数阶非线性系统:建模、分析和仿真,Springer,系列:非线性物理科学,2011,ISBN 978-3-642-18100-9。 http://www.springer.com/engineering/control/book/978-3-
    • matlabpam代码-dsp-library:用于光通信的MATLABDSP函数库
      matlab pam代码 DSP库 该项目包含几种不同的功能,可将DSP算法应用于光通信。 这些功能适用于相干和非相干(PAM,DMT)光通信。 大多数功能是相互独立的。 因此,该代码中的功能可以轻松使用,并与其他DSP功能结合使用。 用法 功能列表以及简短说明在文件中。 输入和输出参数的描述在每个函数的标题中。 讯号 通常,输入(和输出)信号在第一维度上具有时间(例如,列向量),而第二维度用于一次管理多个信号(例如,不同的极化,不同的参数等)。 之所以选择这种约定,是因为MATLAB通过将列保留在内存的连续部分中来存储矩阵,因此,这种约定比其他方法(行向量)要快。 参数 大多数功能使用参数结构作为输入参数。 函数中使用的参数的描述通常在标头中,而coherent-dsp函数的默认参数在文件中。 参考 执照 此代码在下发布。
    • 有关多目标跟踪的PHD滤波的一些资料
      一些关于多目标跟踪的新的文献,主要是有关概率假设密度(PHD)的