

TIM1637.C
- /***************************************************
- * @brief TM1637数码管驱动
- * @date 2020/03/25
- * @author YHB
- ****************************************************/
- #include "TIM1637.h"
- #include "stm32f0xx.h"
- #include "my_sys.h"
- #include "ALL_Includes.h"
- #include "GPIO.h"
- unsigned char tab[] =
-
- {
-
- 0x3F,/*0*/
-
- 0x06,/*1*/
-
- 0x5B,/*2*/
-
- 0x4F,/*3*/
-
- 0x66,/*4*/
-
- 0x6D,/*5*/
-
- 0x7D,/*6*/
-
- 0x07,/*7*/
-
- 0x7F,/*8*/
-
- 0x6F,/*9*/
-
- 0x77,/*10 A*/
-
- 0x7C,/*11 b*/
-
- 0x58,/*12 c*/
-
- 0x5E,/*13 d*/
-
- 0x79,/*14 E*/
-
- 0x71,/*15 F*/
-
- 0x76,/*16 H*/
-
- 0x38,/*17 L*/
-
- 0x54,/*18 n*/
-
- 0x73,/*19 P*/
-
- 0x3E,/*20 U*/
-
- 0x00,/*21 黑屏*/
-
- };
-
- unsigned char temp=0xCF;//显示跳动的冒号
-
- unsigned char NumDis[24]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0X6F,\
- 0x77,0x7C,0x39,0x5E,0x79,0x71,\
- 0x08,0x48,0x49,\
- 0x76,0x38,0x0E,0x50,0x37};//0123456789ABCDEF一二三HLJRS
-
-
- // 最高位设置为1时显示 数码管上的":" 符号
-
- unsigned char disp_num[] = {0x3F, 0x06 ,0xCF,0xCF,0x3f, 0x06}; //存放6个数码管要显示的内容
-
- /*******************************************************************
- * Function Name :void Delay_1us(uint32_t nTimer)
- * Description :1uS延时
- * Input :nTimer
- * Output :void
- * Other :
- * Date :2022.10.27
- *******************************************************************/
- void Delay_1us(uint32_t nTimer)
- {
-
- uint32_t i=0;
- for(i=0;i<nTimer;i++){
- __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
- __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
- __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
- __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
- }
- }
-
- /*******************************************************************
- * Function Name :void Delay_1ms(uint32_t nTimer)
- * Description :1mS延时
- * Input :nTimer
- * Output :void
- * Other :
- * Date :2022.10.27
- *******************************************************************/
- void Delay_1ms(uint32_t nTimer)
- {
-
- uint32_t i=1000*nTimer;
- Delay_1us(i);
- }
- /***************************************************
- * @brief TM1637端口初始化
- * @date 2022/06/25
- * @author YHB
- ****************************************************/
- //端口初始化
-
- void TM1637_Init( void )
-
- {
-
-
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHBPeriphClockCmd( TM1637_CLK_GPIO_CLK | TM1637_DIO_GPIO_CLK, ENABLE );
- GPIO_InitStructure.GPIO_Pin = TM1637_CLK_GPIO_PIN | TM1637_DIO_GPIO_PIN;
-
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init( TM1637_CLK_GPIO_PORT, &GPIO_InitStructure );
-
- }
-
-
- /*
- * 函数名:DS18B20_Mode_IPU
- * 描述 :使DS18B20-DATA引脚变为输入模式
- * 输入 :无
- * 输出 :无
- */
- static void TM1637_DIO_Mode_IPU(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /*选择要控制的TM1637_DQ_GPIO_PORT引脚*/
- GPIO_InitStructure.GPIO_Pin = TM1637_DIO_GPIO_PIN;
- /*设置引脚模式为上拉输入模式*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
- /*调用库函数,初始化TM1637_DIO_GPIO_PORT*/
- GPIO_Init(TM1637_DIO_GPIO_PORT, &GPIO_InitStructure);
- }
- /*
- * 函数名:TM1637_DIO_Mode_Out_PP
- * 描述 :使TM1637_DIO_Mode引脚变为输出模式
- * 输入 :无
- * 输出 :无
- */
- static void TM1637_DIO_Mode_Out_PP(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*选择要控制的TM1637_DIO_GPIO_PORT引脚*/
- GPIO_InitStructure.GPIO_Pin = TM1637_DIO_GPIO_PIN;
-
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
-
- GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
-
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- /*调用库函数,初始化TM1637_DIO_GPIO_PORT*/
- GPIO_Init(TM1637_DIO_GPIO_PORT, &GPIO_InitStructure);
- }
-
-
-
-
-
- //起始位 CLK为高电平时,DIO由高变低
-
- void TM1637_Start( void )
-
- {
-
- TM1637_DIO_Mode_Out_PP();
-
- TM1637_CLK_PORT_H();
- TM1637_DIO_PORT_H();
-
- Delay_1us(2);
-
- TM1637_DIO_PORT_L();
-
- }
-
- //等待应答 传输数据正确时,在第八个时钟下降沿,芯片内部会产生一个ACK信号,将DIO管脚拉低,在第九个时钟结束之后释放DIO总线。
-
- void TM1637_Ack( void )
-
- {
-
-
-
- TM1637_CLK_PORT_L();
-
- Delay_1us(5); //在第八个时钟下降沿之后延时 5us,开始判断 ACK 信号
-
- //while( TM1637_DIO_Read_Bit()); //等待应答位 这一行代码也可以不要 不影响实际使用效果 在使用软件仿真的时候需要屏蔽这句代码,否则程序就会卡在这里。
-
- TM1637_CLK_PORT_H();
-
- Delay_1us(2);
-
- TM1637_CLK_PORT_L();
-
- }
-
- //停止位 CLK为高电平时,DIO由低变高
-
- void TM1637_Stop( void )
-
- {
-
- TM1637_DIO_Mode_Out_PP();
-
- TM1637_CLK_PORT_L();
-
- Delay_1us(2);
-
- TM1637_DIO_PORT_L();
-
- Delay_1us(2);
-
- TM1637_CLK_PORT_H();
-
- Delay_1us(2);
-
- TM1637_DIO_PORT_H();
-
- }
-
- //输入数据在CLK的低电平变化,在CLK的高电平被传输。
-
- //每传输一个字节,芯片内部在第八个时钟下降沿产生一个ACK
-
- // 写一个字节
-
- void TM1637_WriteByte( unsigned char oneByte )
-
- {
-
- unsigned char i;
-
- TM1637_DIO_Mode_Out_PP();
-
- for( i = 0; i < 8; i++ )
-
- {
-
- TM1637_CLK_PORT_L();
-
- if( oneByte & 0x01 ) //低位在前
- {TM1637_DIO_PORT_H();}
-
- else
-
- { TM1637_DIO_PORT_L();}
- Delay_1us(3);
-
- oneByte = oneByte >> 1;
-
- TM1637_CLK_PORT_H();
-
- Delay_1us(3);
-
- }
-
- }
- //TM1637_Display_INC();//固定显示 0 1 : 2 3
- //写显示寄存器 地址自增
-
- void TM1637_Display_INC( void )
-
- {
-
- unsigned char i;
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x40 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
-
- TM1637_Ack();
-
- TM1637_Stop();
- TM1637_Start();
-
- TM1637_WriteByte( 0xC0 ); //地址命令设置 显示地址 00H
-
- TM1637_Ack();
-
-
-
- for( i = 0; i < 6; i++ ) //地址自加,不必每次都写地址
-
- {
-
- TM1637_WriteByte( disp_num[i] ); //发送数据 disp_num[]中存储6个数码管要显示的内容
-
- TM1637_Ack();
-
- }
-
- TM1637_Stop();
-
-
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
-
- TM1637_Ack();
-
- TM1637_Stop();
-
-
-
-
- }
-
-
- //写显示寄存器 地址不自增
- // add 数码管的地址 0--5
- // value 要显示的内容
-
- void TM1637_Display_NoINC( unsigned char add, unsigned char value )
-
- {
-
- // unsigned char i;
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x44 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
-
- TM1637_Ack();
-
- TM1637_Stop();
-
-
- TM1637_Start();
-
- TM1637_WriteByte( 0xC0 | add ); //地址命令设置 显示地址 C0H---C5H
-
- TM1637_Ack();
-
-
-
- TM1637_WriteByte( value ); //发送数据 value存储要显示的内容
-
- TM1637_Ack();
-
- TM1637_Stop();
-
-
-
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
-
- TM1637_Ack();
-
- TM1637_Stop();
-
-
-
- }
-
- //写显示寄存器 :
- // add 数码管的地址 0--5
- // value 要显示的内容
-
- void TM1637_Display_INC_DP( void)
-
- {
-
- unsigned char i;
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x44 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
-
- TM1637_Ack();
-
- TM1637_Stop();
- TM1637_Start();
-
- TM1637_WriteByte( 0xC3 ); //地址命令设置 显示地址 00H
-
- TM1637_Ack();
-
-
-
-
-
- TM1637_WriteByte( 0X86 ); //发送数据 disp_num[]中存储6个数码管要显示的内容
-
- TM1637_Ack();
-
-
-
- TM1637_Stop();
-
-
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
-
- TM1637_Ack();
-
- TM1637_Stop();
-
-
-
- }
-
-
-
-
- // level : 设置亮度等级 0---7
-
- void TM1637_SetBrightness( unsigned char level )
-
- {
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x88 | level ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
-
- TM1637_Ack();
-
- TM1637_Stop();
-
- }
-
-
- //读按键 读按键时,时钟频率应小于 250K,先读低位,后读高位。
-
- unsigned char TM1637_ScanKey( void )
-
- {
-
- unsigned char reKey, i;
-
- TM1637_Start();
-
- TM1637_WriteByte( 0x42 ); //读键扫数据
-
- TM1637_Ack();
-
- TM1637_DIO_PORT_H(); //在读按键之前拉高数据线
-
- TM1637_DIO_Mode_IPU();
-
- for( i = 0; i < 8; i++ ) //从低位开始读
-
- {
-
- TM1637_CLK_PORT_L();
-
- reKey = reKey >> 1;
-
- Delay_1us(30);
-
- TM1637_CLK_PORT_H();
-
- if( TM1637_DIO_Read_Bit())
-
- {
-
- reKey = reKey | 0x80;
-
- }
-
- else
-
- {
-
- reKey = reKey | 0x00;
-
- }
-
- Delay_1us(30);
-
- }
-
- TM1637_Ack();
-
- TM1637_Stop();
-
- return( reKey );
-
- }
-
- //按键处理函数,按键数据低位在前高位在后
-
- unsigned char TM1637_KeyProcess( void )
-
- {
-
- unsigned char temp;
-
- unsigned char keyNum = 0;
-
- temp = TM1637_ScanKey(); //读取按键返回值
-
- if( temp != 0xff )
-
- {
-
- switch( temp )
-
- {
-
- case 0xf7 : //K1与SG1对应按键按下
-
- keyNum = 1;
-
- break;
-
- case 0xf6 : //K1与SG2对应按键按下
-
- keyNum = 2;
-
- break;
-
- case 0xf5 : //K1与SG3对应按键按下
-
- keyNum = 3;
-
- break;
-
- case 0xf4 : //K1与SG4对应按键按下
-
- keyNum = 4;
-
- break;
-
- case 0xf3 : //K1与SG5对应按键按下
-
- keyNum = 5;
-
- break;
-
- case 0xf2 : //K1与SG6对应按键按下
-
- keyNum = 6;
-
- break;
-
- case 0xf1 : //K1与SG7对应按键按下
-
- keyNum = 7;
-
- break;
-
- case 0xf0 : //K1与SG8对应按键按下
-
- keyNum = 8;
-
- break;
-
-
-
- case 0xef : //K2与SG1对应按键按下
-
- keyNum = 9;
-
- break;
-
- case 0xee : //K2与SG2对应按键按下
-
- keyNum = 10;
-
- break;
-
- case 0xed : //K2与SG3对应按键按下
-
- keyNum = 11;
-
- break;
-
- case 0xec : //K2与SG4对应按键按下
-
- keyNum = 12;
-
- break;
-
- case 0xeb : //K2与SG5对应按键按下
-
- keyNum = 13;
-
- break;
-
- case 0xea : //K2与SG6对应按键按下
-
- keyNum = 14;
-
- break;
-
- case 0xe9 : //K2与SG7对应按键按下
-
- keyNum = 15;
-
- break;
-
- case 0xe8 : //K2与SG8对应按键按下
-
- keyNum = 16;
-
- break;
-
- default :
-
- keyNum = 0;
-
- break;
-
- }
-
- }
-
- return keyNum;
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
TIM1637.H
- #ifndef _TM1637_H
- #define _TM1637_H
-
- #include "stm32f0xx.h"
- #include "stm32f0xx.h"
- #include "my_sys.h"
- #include "ALL_Includes.h"
- #include "GPIO.h"
- /***********************************************************************
- * 项目:165配置子代码
- * 作者:电子工程部
- * 版本:zyz_lcm1.0.0
- * 日期:03/14/2011
- * 功能:写595
- ************************************************************************/
- /* 定义IIC连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */
-
- extern unsigned char NumDis[24];//0123456789ABCDEF一二三HLJRS
-
- #define TM1637_CLK_GPIO_PORT GPIOF /* GPIO端口 */
-
- #define TM1637_CLK_GPIO_CLK RCC_AHBPeriph_GPIOF /* GPIO端口时钟 */
-
- #define TM1637_CLK_GPIO_PIN GPIO_Pin_0
-
-
-
- #define TM1637_DIO_GPIO_PORT GPIOF /* GPIO端口 */
-
- #define TM1637_DIO_GPIO_CLK RCC_AHBPeriph_GPIOF /* GPIO端口时钟 */
-
- #define TM1637_DIO_GPIO_PIN GPIO_Pin_1
-
- //在模拟时序的时候为了方便编写代码,将用到的时钟口和数据口也重新定义。
-
- /**********************************************************************/
- #define TM1637_DIO_PORT_H() GPIO_SetBits(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
- #define TM1637_DIO_PORT_L() GPIO_ResetBits(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
-
- #define TM1637_CLK_PORT_H() GPIO_SetBits(TM1637_CLK_GPIO_PORT,TM1637_CLK_GPIO_PIN)
- #define TM1637_CLK_PORT_L() GPIO_ResetBits(TM1637_CLK_GPIO_PORT,TM1637_CLK_GPIO_PIN)
-
-
- #define TM1637_DIO_Read_Bit() GPIO_ReadInputDataBit(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
- /*****************************************************************************************************/
- void TM1637_Init( void );
- void Delay_1us(uint32_t nTimer);
- void Delay_1ms(uint32_t nTimer);
- void TM1637_Display_INC( void );
- void TM1637_Display_INC_DP( void);
- void TM1637_Display_NoINC( unsigned char add, unsigned char value );
- /*****************************************************************************************************/
- #endif
-
-
-
-
main.c
- #include "delay.h"
- #include "GPIO.H"
- #include "USART.h"
- #include "TIM.h"
- #include "EXTI.h"
- #include "ADC.h"
- #include "my_sys.h"
- #include "mytype.h"
- #include "IWDG.H"
- #include "stdlib.H"
- #include "TM1650.H"
- #include "TIM1637.H"
- /*
- typedef struct
- {
- u16 heard;
- u16 end;
- u16 beepled;
- u16 shumaguan1;
- u16 shumaguan2;
- u16 shumaguan3;
- u16 shumaguan4;
- u16 shumaguanpoint[5];
- u8 rang_num1;
- u16 remote_addrL1;
- u16 data1[10]; //接收串口数据
- }sPkg;
- */
- sPkg usasPkg ={0,0,0,1,2,3,4,0,10,1,1};
- #define point 0x80
- #define ADD_NUM 0x20
-
- #define time_rang_b100 100
- #define time_rang_b200 200
- #define time_rang_b300 300
- #define time_rang_b400 400
- #define time_rang_b500 500
- #define time_rang_b800 800
- #define time_rang_b1000 1000
- #define time_rang_b2000 2000
- u8 rang_num;
-
- u8 rang_num_old=100;
- u8 rang_num_new=100;
- u8 rang_num_old1=100;
- u8 rang_num_new1=10;
- newPkg_usart(4) jiadianPkg={8,0xa2,0x90,0x01,0x00,{00,00,00,00}};//发送协议
-
- u8 USART[8]={0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X82}; //
-
- unsigned char tab_num[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
-
- void ADJC(void) ; //电池电压检测
- void YIBIAO2(void) ; //仪表驱动反转
- void YIBIAO1(void) ; //仪表驱动正转
- void YIBIAO(void) ; //仪表开机检测
- void STMFLASH_Read(void); //读取flash数据
- void STMFLASH_Write(u16 NumToWrite); 写入flash数据
- u16 STMFLASH_ReadHalfWord(u32 faddr) ; //写入flash数据
-
- //共阴极数码管
- unsigned char SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1-9
- unsigned char SEGDataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //有小数点只用于地址0xc1
-
- unsigned char i,j;
-
-
- /*
- 私有定义
- */
- void time_judge( void );
-
- unsigned int countTime = 0;
- unsigned char time, sec;
- struct {
- char shi;
- char ge;
- }Hour;
-
- struct {
- char shi;
- char ge;
- }Min;
-
-
-
-
-
- int main(void)
- {
-
- int data=0;
- GPIO_MyInit();
- USART_MyInit();
- // TIM14_MyInit(400,50); // 10分频。PWM频率=48000000/50/40=24000hz 蜂鸣器
- // ADC_MyInit();
- I2C_MyInit();//TIM1650
- TM1637_Init();//TIM1637
- delay_init();
- TIM3_Int_Init(65535);//us定时器 10ms
- TIM14_Init(7199,1999);//定时器
- Write_DATA(0x48,0x01);
-
- Write_DATA(0x48,0x75);//数据命令:0x48,5级亮度,7段显示
- for(i=0;i<16;i++)
- {
- for(j=0;j<4;j++)
- {
- // Display_Fix(j,tab1[(j+i)%16]|point);//
- Display_Num(j,i);
- }
- delay_ms(50);
- }
- for(j=0;j<4;j++)
- {
- // Display_Fix(j,tab1[(j+i)%16]|point);//
- Display_Num(j,0);
- }
-
- Display_Num(1,usasPkg.shumaguan2|0x80);
- while(1)
- {
-
-
-
- // ADJC();
- // GPIO_ResetBits(GPIOB,GPIO_Pin_1); //无线模式发送 SEA接口 接地
-
-
-
-
- USART[2]=checkdata[0];
- USART[3]=checkdata[1];
- USART[4]=checkdata[2];
- USART[5]=checkdata[3];
- USART[6]=checkdata[4];
- USART[7]=checkdata[5];
- //协议 AA BB 02 04 CC DD
-
-
-
-
-
-
-
-
-
-
-
- if(time_flag_1s==1)
- {
-
- time_flag_1s=0;
- }
- if(time_flag1_2s>=time_rang_b800)
- {
-
- if(data>=9)
- {
-
- data=0;
- }
- time_judge();
- //TM1637_Display_NoINC( 00, NumDis[data++] );
- //TM1637_Display_NoINC( 01, NumDis[data] );
-
- TM1637_Display_NoINC( 00, NumDis[Min.shi] );
- TM1637_Display_NoINC( 01, NumDis[Min.ge] );
- TM1637_Display_NoINC( 02, NumDis[data++]|0X80);
- TM1637_Display_NoINC( 03, NumDis[Min.ge]|0X80);
-
- //TM1637_Display_INC_DP();//: 显示
-
-
- srand(rang_num_new);
- usasPkg.rang_num1= rand()%10 +1; //产生一个30到50的随机数
- rang_num_new=usasPkg.rang_num1;
-
-
-
-
- time_flag1_2s=0;
-
- }
- if(time_flag2_2s>=time_rang_b1000)
- {
- srand(rang_num_old);
- rang_num= rand()%10 +1; //产生一个30到50的随机数
- rang_num_old=rang_num;
- // TM1637_Display_INC();//固定显示 0 1 : 2 3
- TM1637_Display_NoINC( 02, NumDis[data]|0X00);//:闪烁
- TM1637_Display_NoINC( 03, NumDis[data]|0X00);
- time_flag2_2s=0;
- }
-
-
-
- if(time_flag3_2s>=time_rang_b1000+time_rang_b2000+time_rang_b300+time_rang_b800)
- {
-
- srand(rang_num_new1);
- usasPkg.rang_num2= rand()%10+1; //产生一个0到10的随机数
- rang_num_new1=usasPkg.rang_num2;
- if(usasPkg.rang_num2>=3)
- {
- usasPkg.rang_num2=2;
- }
-
-
-
- time_flag3_2s=0;
-
- }//if
-
- }//while
-
-
- }//main
-
-
-
-
- /*************************************************************
- * 名称 : time_judge( void )
- * 功能 : 判断时间变化
- * 输入 : void
- * 输出 : 无
- **************************************************************/
- void time_judge( void )
- {
- if(++sec == 60) //60秒
- {
- sec = 0;
- if((Hour.shi || Hour.ge || Min.shi || Min.ge) && (--Min.ge <= -1))
- {
- Min.ge = 9;
- if((Hour.shi) ||(Hour.ge) && (--Min.shi <= -1))
- {
- Min.shi = 5;
- if(Hour.shi && (--Hour.ge <= -1))
- {
- Hour.ge = 9;
- if(--Hour.shi <= -1)
- {
- Hour.shi = 0;
- }
- }
- else
- if((!Hour.shi) && (--Hour.ge <= -1))
- {
- Hour.ge = 0;
- }
- }
- else
- if((!Hour.shi) && (!Hour.ge) && (--Min.shi <= -1))
- {
- Min.shi = 0;
- }
- }
- else
- if(((!Hour.shi) && (!Hour.ge) && (!Min.shi) ) && (Min.ge <= -1))
- {
- Min.ge = 0;
- }
- }
- }
-
-
-
- u16 STMFLASH_ReadHalfWord(u32 faddr)
- {
- return *(u16*)faddr;
- }
-
- u16 C;
- //从指定地址开始读出指定长度的数据
- void STMFLASH_Read()
- {
- C=STMFLASH_ReadHalfWord(0x08002000);//读取2个字节
- }
-
- void STMFLASH_Write(u16 NumToWrite)
- {
- FLASH_Unlock(); //解锁
-
- FLASH_ErasePage(0x08002000);//擦除这个扇区
-
- FLASH_ProgramHalfWord(0x08002000, NumToWrite);//写入16位数据
- // FLASH_ProgramOptionByteData(0x08002000,NumToWrite);//写入8位数据
- FLASH_Lock();//上锁
- }