• STM32F030F4驱动TIM1637数码管芯片


     

     

     

    TIM1637.C 

     

    1. /***************************************************
    2. * @brief TM1637数码管驱动
    3. * @date 2020/03/25
    4. * @author YHB
    5. ****************************************************/
    6. #include "TIM1637.h"
    7. #include "stm32f0xx.h"
    8. #include "my_sys.h"
    9. #include "ALL_Includes.h"
    10. #include "GPIO.h"
    11. unsigned char tab[] =
    12. {
    13. 0x3F,/*0*/
    14. 0x06,/*1*/
    15. 0x5B,/*2*/
    16. 0x4F,/*3*/
    17. 0x66,/*4*/
    18. 0x6D,/*5*/
    19. 0x7D,/*6*/
    20. 0x07,/*7*/
    21. 0x7F,/*8*/
    22. 0x6F,/*9*/
    23. 0x77,/*10 A*/
    24. 0x7C,/*11 b*/
    25. 0x58,/*12 c*/
    26. 0x5E,/*13 d*/
    27. 0x79,/*14 E*/
    28. 0x71,/*15 F*/
    29. 0x76,/*16 H*/
    30. 0x38,/*17 L*/
    31. 0x54,/*18 n*/
    32. 0x73,/*19 P*/
    33. 0x3E,/*20 U*/
    34. 0x00,/*21 黑屏*/
    35. };
    36. unsigned char temp=0xCF;//显示跳动的冒号
    37. unsigned char NumDis[24]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0X6F,\
    38. 0x77,0x7C,0x39,0x5E,0x79,0x71,\
    39. 0x08,0x48,0x49,\
    40. 0x76,0x38,0x0E,0x50,0x37};//0123456789ABCDEF一二三HLJRS
    41. // 最高位设置为1时显示 数码管上的":" 符号
    42. unsigned char disp_num[] = {0x3F, 0x06 ,0xCF,0xCF,0x3f, 0x06}; //存放6个数码管要显示的内容
    43. /*******************************************************************
    44. * Function Name :void Delay_1us(uint32_t nTimer)
    45. * Description :1uS延时
    46. * Input :nTimer
    47. * Output :void
    48. * Other :
    49. * Date :2022.10.27
    50. *******************************************************************/
    51. void Delay_1us(uint32_t nTimer)
    52. {
    53. uint32_t i=0;
    54. for(i=0;i<nTimer;i++){
    55. __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
    56. __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
    57. __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
    58. __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
    59. }
    60. }
    61. /*******************************************************************
    62. * Function Name :void Delay_1ms(uint32_t nTimer)
    63. * Description :1mS延时
    64. * Input :nTimer
    65. * Output :void
    66. * Other :
    67. * Date :2022.10.27
    68. *******************************************************************/
    69. void Delay_1ms(uint32_t nTimer)
    70. {
    71. uint32_t i=1000*nTimer;
    72. Delay_1us(i);
    73. }
    74. /***************************************************
    75. * @brief TM1637端口初始化
    76. * @date 2022/06/25
    77. * @author YHB
    78. ****************************************************/
    79. //端口初始化
    80. void TM1637_Init( void )
    81. {
    82. GPIO_InitTypeDef GPIO_InitStructure;
    83. RCC_AHBPeriphClockCmd( TM1637_CLK_GPIO_CLK | TM1637_DIO_GPIO_CLK, ENABLE );
    84. GPIO_InitStructure.GPIO_Pin = TM1637_CLK_GPIO_PIN | TM1637_DIO_GPIO_PIN;
    85. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    86. GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
    87. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    88. GPIO_Init( TM1637_CLK_GPIO_PORT, &GPIO_InitStructure );
    89. }
    90. /*
    91. * 函数名:DS18B20_Mode_IPU
    92. * 描述 :使DS18B20-DATA引脚变为输入模式
    93. * 输入 :无
    94. * 输出 :无
    95. */
    96. static void TM1637_DIO_Mode_IPU(void)
    97. {
    98. GPIO_InitTypeDef GPIO_InitStructure;
    99. /*选择要控制的TM1637_DQ_GPIO_PORT引脚*/
    100. GPIO_InitStructure.GPIO_Pin = TM1637_DIO_GPIO_PIN;
    101. /*设置引脚模式为上拉输入模式*/
    102. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    103. GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
    104. /*调用库函数,初始化TM1637_DIO_GPIO_PORT*/
    105. GPIO_Init(TM1637_DIO_GPIO_PORT, &GPIO_InitStructure);
    106. }
    107. /*
    108. * 函数名:TM1637_DIO_Mode_Out_PP
    109. * 描述 :使TM1637_DIO_Mode引脚变为输出模式
    110. * 输入 :无
    111. * 输出 :无
    112. */
    113. static void TM1637_DIO_Mode_Out_PP(void)
    114. {
    115. GPIO_InitTypeDef GPIO_InitStructure;
    116. /*选择要控制的TM1637_DIO_GPIO_PORT引脚*/
    117. GPIO_InitStructure.GPIO_Pin = TM1637_DIO_GPIO_PIN;
    118. /*设置引脚模式为通用推挽输出*/
    119. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    120. GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
    121. /*设置引脚速率为50MHz */
    122. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    123. /*调用库函数,初始化TM1637_DIO_GPIO_PORT*/
    124. GPIO_Init(TM1637_DIO_GPIO_PORT, &GPIO_InitStructure);
    125. }
    126. //起始位 CLK为高电平时,DIO由高变低
    127. void TM1637_Start( void )
    128. {
    129. TM1637_DIO_Mode_Out_PP();
    130. TM1637_CLK_PORT_H();
    131. TM1637_DIO_PORT_H();
    132. Delay_1us(2);
    133. TM1637_DIO_PORT_L();
    134. }
    135. //等待应答 传输数据正确时,在第八个时钟下降沿,芯片内部会产生一个ACK信号,将DIO管脚拉低,在第九个时钟结束之后释放DIO总线。
    136. void TM1637_Ack( void )
    137. {
    138. TM1637_CLK_PORT_L();
    139. Delay_1us(5); //在第八个时钟下降沿之后延时 5us,开始判断 ACK 信号
    140. //while( TM1637_DIO_Read_Bit()); //等待应答位 这一行代码也可以不要 不影响实际使用效果 在使用软件仿真的时候需要屏蔽这句代码,否则程序就会卡在这里。
    141. TM1637_CLK_PORT_H();
    142. Delay_1us(2);
    143. TM1637_CLK_PORT_L();
    144. }
    145. //停止位 CLK为高电平时,DIO由低变高
    146. void TM1637_Stop( void )
    147. {
    148. TM1637_DIO_Mode_Out_PP();
    149. TM1637_CLK_PORT_L();
    150. Delay_1us(2);
    151. TM1637_DIO_PORT_L();
    152. Delay_1us(2);
    153. TM1637_CLK_PORT_H();
    154. Delay_1us(2);
    155. TM1637_DIO_PORT_H();
    156. }
    157. //输入数据在CLK的低电平变化,在CLK的高电平被传输。
    158. //每传输一个字节,芯片内部在第八个时钟下降沿产生一个ACK
    159. // 写一个字节
    160. void TM1637_WriteByte( unsigned char oneByte )
    161. {
    162. unsigned char i;
    163. TM1637_DIO_Mode_Out_PP();
    164. for( i = 0; i < 8; i++ )
    165. {
    166. TM1637_CLK_PORT_L();
    167. if( oneByte & 0x01 ) //低位在前
    168. {TM1637_DIO_PORT_H();}
    169. else
    170. { TM1637_DIO_PORT_L();}
    171. Delay_1us(3);
    172. oneByte = oneByte >> 1;
    173. TM1637_CLK_PORT_H();
    174. Delay_1us(3);
    175. }
    176. }
    177. //TM1637_Display_INC();//固定显示 0 1 : 2 3
    178. //写显示寄存器 地址自增
    179. void TM1637_Display_INC( void )
    180. {
    181. unsigned char i;
    182. TM1637_Start();
    183. TM1637_WriteByte( 0x40 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
    184. TM1637_Ack();
    185. TM1637_Stop();
    186. TM1637_Start();
    187. TM1637_WriteByte( 0xC0 ); //地址命令设置 显示地址 00H
    188. TM1637_Ack();
    189. for( i = 0; i < 6; i++ ) //地址自加,不必每次都写地址
    190. {
    191. TM1637_WriteByte( disp_num[i] ); //发送数据 disp_num[]中存储6个数码管要显示的内容
    192. TM1637_Ack();
    193. }
    194. TM1637_Stop();
    195. TM1637_Start();
    196. TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
    197. TM1637_Ack();
    198. TM1637_Stop();
    199. }
    200. //写显示寄存器 地址不自增
    201. // add 数码管的地址 0--5
    202. // value 要显示的内容
    203. void TM1637_Display_NoINC( unsigned char add, unsigned char value )
    204. {
    205. // unsigned char i;
    206. TM1637_Start();
    207. TM1637_WriteByte( 0x44 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
    208. TM1637_Ack();
    209. TM1637_Stop();
    210. TM1637_Start();
    211. TM1637_WriteByte( 0xC0 | add ); //地址命令设置 显示地址 C0H---C5H
    212. TM1637_Ack();
    213. TM1637_WriteByte( value ); //发送数据 value存储要显示的内容
    214. TM1637_Ack();
    215. TM1637_Stop();
    216. TM1637_Start();
    217. TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
    218. TM1637_Ack();
    219. TM1637_Stop();
    220. }
    221. //写显示寄存器 :
    222. // add 数码管的地址 0--5
    223. // value 要显示的内容
    224. void TM1637_Display_INC_DP( void)
    225. {
    226. unsigned char i;
    227. TM1637_Start();
    228. TM1637_WriteByte( 0x44 ); //写数据到显示寄存器 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1模式
    229. TM1637_Ack();
    230. TM1637_Stop();
    231. TM1637_Start();
    232. TM1637_WriteByte( 0xC3 ); //地址命令设置 显示地址 00H
    233. TM1637_Ack();
    234. TM1637_WriteByte( 0X86 ); //发送数据 disp_num[]中存储6个数码管要显示的内容
    235. TM1637_Ack();
    236. TM1637_Stop();
    237. TM1637_Start();
    238. TM1637_WriteByte( 0x88 | 0x07 ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
    239. TM1637_Ack();
    240. TM1637_Stop();
    241. }
    242. // level : 设置亮度等级 0---7
    243. void TM1637_SetBrightness( unsigned char level )
    244. {
    245. TM1637_Start();
    246. TM1637_WriteByte( 0x88 | level ); //开显示,最大亮度-----调节脉冲宽度控制0---7 脉冲宽度14/16
    247. TM1637_Ack();
    248. TM1637_Stop();
    249. }
    250. //读按键 读按键时,时钟频率应小于 250K,先读低位,后读高位。
    251. unsigned char TM1637_ScanKey( void )
    252. {
    253. unsigned char reKey, i;
    254. TM1637_Start();
    255. TM1637_WriteByte( 0x42 ); //读键扫数据
    256. TM1637_Ack();
    257. TM1637_DIO_PORT_H(); //在读按键之前拉高数据线
    258. TM1637_DIO_Mode_IPU();
    259. for( i = 0; i < 8; i++ ) //从低位开始读
    260. {
    261. TM1637_CLK_PORT_L();
    262. reKey = reKey >> 1;
    263. Delay_1us(30);
    264. TM1637_CLK_PORT_H();
    265. if( TM1637_DIO_Read_Bit())
    266. {
    267. reKey = reKey | 0x80;
    268. }
    269. else
    270. {
    271. reKey = reKey | 0x00;
    272. }
    273. Delay_1us(30);
    274. }
    275. TM1637_Ack();
    276. TM1637_Stop();
    277. return( reKey );
    278. }
    279. //按键处理函数,按键数据低位在前高位在后
    280. unsigned char TM1637_KeyProcess( void )
    281. {
    282. unsigned char temp;
    283. unsigned char keyNum = 0;
    284. temp = TM1637_ScanKey(); //读取按键返回值
    285. if( temp != 0xff )
    286. {
    287. switch( temp )
    288. {
    289. case 0xf7 : //K1与SG1对应按键按下
    290. keyNum = 1;
    291. break;
    292. case 0xf6 : //K1与SG2对应按键按下
    293. keyNum = 2;
    294. break;
    295. case 0xf5 : //K1与SG3对应按键按下
    296. keyNum = 3;
    297. break;
    298. case 0xf4 : //K1与SG4对应按键按下
    299. keyNum = 4;
    300. break;
    301. case 0xf3 : //K1与SG5对应按键按下
    302. keyNum = 5;
    303. break;
    304. case 0xf2 : //K1与SG6对应按键按下
    305. keyNum = 6;
    306. break;
    307. case 0xf1 : //K1与SG7对应按键按下
    308. keyNum = 7;
    309. break;
    310. case 0xf0 : //K1与SG8对应按键按下
    311. keyNum = 8;
    312. break;
    313. case 0xef : //K2与SG1对应按键按下
    314. keyNum = 9;
    315. break;
    316. case 0xee : //K2与SG2对应按键按下
    317. keyNum = 10;
    318. break;
    319. case 0xed : //K2与SG3对应按键按下
    320. keyNum = 11;
    321. break;
    322. case 0xec : //K2与SG4对应按键按下
    323. keyNum = 12;
    324. break;
    325. case 0xeb : //K2与SG5对应按键按下
    326. keyNum = 13;
    327. break;
    328. case 0xea : //K2与SG6对应按键按下
    329. keyNum = 14;
    330. break;
    331. case 0xe9 : //K2与SG7对应按键按下
    332. keyNum = 15;
    333. break;
    334. case 0xe8 : //K2与SG8对应按键按下
    335. keyNum = 16;
    336. break;
    337. default :
    338. keyNum = 0;
    339. break;
    340. }
    341. }
    342. return keyNum;
    343. }

    TIM1637.H

    1. #ifndef _TM1637_H
    2. #define _TM1637_H
    3. #include "stm32f0xx.h"
    4. #include "stm32f0xx.h"
    5. #include "my_sys.h"
    6. #include "ALL_Includes.h"
    7. #include "GPIO.h"
    8. /***********************************************************************
    9. * 项目:165配置子代码
    10. * 作者:电子工程部
    11. * 版本:zyz_lcm1.0.0
    12. * 日期:03/14/2011
    13. * 功能:写595
    14. ************************************************************************/
    15. /* 定义IIC连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */
    16. extern unsigned char NumDis[24];//0123456789ABCDEF一二三HLJRS
    17. #define TM1637_CLK_GPIO_PORT GPIOF /* GPIO端口 */
    18. #define TM1637_CLK_GPIO_CLK RCC_AHBPeriph_GPIOF /* GPIO端口时钟 */
    19. #define TM1637_CLK_GPIO_PIN GPIO_Pin_0
    20. #define TM1637_DIO_GPIO_PORT GPIOF /* GPIO端口 */
    21. #define TM1637_DIO_GPIO_CLK RCC_AHBPeriph_GPIOF /* GPIO端口时钟 */
    22. #define TM1637_DIO_GPIO_PIN GPIO_Pin_1
    23. //在模拟时序的时候为了方便编写代码,将用到的时钟口和数据口也重新定义。
    24. /**********************************************************************/
    25. #define TM1637_DIO_PORT_H() GPIO_SetBits(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
    26. #define TM1637_DIO_PORT_L() GPIO_ResetBits(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
    27. #define TM1637_CLK_PORT_H() GPIO_SetBits(TM1637_CLK_GPIO_PORT,TM1637_CLK_GPIO_PIN)
    28. #define TM1637_CLK_PORT_L() GPIO_ResetBits(TM1637_CLK_GPIO_PORT,TM1637_CLK_GPIO_PIN)
    29. #define TM1637_DIO_Read_Bit() GPIO_ReadInputDataBit(TM1637_DIO_GPIO_PORT,TM1637_DIO_GPIO_PIN)
    30. /*****************************************************************************************************/
    31. void TM1637_Init( void );
    32. void Delay_1us(uint32_t nTimer);
    33. void Delay_1ms(uint32_t nTimer);
    34. void TM1637_Display_INC( void );
    35. void TM1637_Display_INC_DP( void);
    36. void TM1637_Display_NoINC( unsigned char add, unsigned char value );
    37. /*****************************************************************************************************/
    38. #endif

     main.c

    1. #include "delay.h"
    2. #include "GPIO.H"
    3. #include "USART.h"
    4. #include "TIM.h"
    5. #include "EXTI.h"
    6. #include "ADC.h"
    7. #include "my_sys.h"
    8. #include "mytype.h"
    9. #include "IWDG.H"
    10. #include "stdlib.H"
    11. #include "TM1650.H"
    12. #include "TIM1637.H"
    13. /*
    14. typedef struct
    15. {
    16. u16 heard;
    17. u16 end;
    18. u16 beepled;
    19. u16 shumaguan1;
    20. u16 shumaguan2;
    21. u16 shumaguan3;
    22. u16 shumaguan4;
    23. u16 shumaguanpoint[5];
    24. u8 rang_num1;
    25. u16 remote_addrL1;
    26. u16 data1[10]; //接收串口数据
    27. }sPkg;
    28. */
    29. sPkg usasPkg ={0,0,0,1,2,3,4,0,10,1,1};
    30. #define point 0x80
    31. #define ADD_NUM 0x20
    32. #define time_rang_b100 100
    33. #define time_rang_b200 200
    34. #define time_rang_b300 300
    35. #define time_rang_b400 400
    36. #define time_rang_b500 500
    37. #define time_rang_b800 800
    38. #define time_rang_b1000 1000
    39. #define time_rang_b2000 2000
    40. u8 rang_num;
    41. u8 rang_num_old=100;
    42. u8 rang_num_new=100;
    43. u8 rang_num_old1=100;
    44. u8 rang_num_new1=10;
    45. newPkg_usart(4) jiadianPkg={8,0xa2,0x90,0x01,0x00,{00,00,00,00}};//发送协议
    46. u8 USART[8]={0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X82}; //
    47. unsigned char tab_num[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
    48. void ADJC(void) ; //电池电压检测
    49. void YIBIAO2(void) ; //仪表驱动反转
    50. void YIBIAO1(void) ; //仪表驱动正转
    51. void YIBIAO(void) ; //仪表开机检测
    52. void STMFLASH_Read(void); //读取flash数据
    53. void STMFLASH_Write(u16 NumToWrite); 写入flash数据
    54. u16 STMFLASH_ReadHalfWord(u32 faddr) ; //写入flash数据
    55. //共阴极数码管
    56. unsigned char SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1-9
    57. unsigned char SEGDataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //有小数点只用于地址0xc1
    58. unsigned char i,j;
    59. /*
    60. 私有定义
    61. */
    62. void time_judge( void );
    63. unsigned int countTime = 0;
    64. unsigned char time, sec;
    65. struct {
    66. char shi;
    67. char ge;
    68. }Hour;
    69. struct {
    70. char shi;
    71. char ge;
    72. }Min;
    73. int main(void)
    74. {
    75. int data=0;
    76. GPIO_MyInit();
    77. USART_MyInit();
    78. // TIM14_MyInit(400,50); // 10分频。PWM频率=48000000/50/40=24000hz 蜂鸣器
    79. // ADC_MyInit();
    80. I2C_MyInit();//TIM1650
    81. TM1637_Init();//TIM1637
    82. delay_init();
    83. TIM3_Int_Init(65535);//us定时器 10ms
    84. TIM14_Init(7199,1999);//定时器
    85. Write_DATA(0x48,0x01);
    86. Write_DATA(0x48,0x75);//数据命令:0x48,5级亮度,7段显示
    87. for(i=0;i<16;i++)
    88. {
    89. for(j=0;j<4;j++)
    90. {
    91. // Display_Fix(j,tab1[(j+i)%16]|point);//
    92. Display_Num(j,i);
    93. }
    94. delay_ms(50);
    95. }
    96. for(j=0;j<4;j++)
    97. {
    98. // Display_Fix(j,tab1[(j+i)%16]|point);//
    99. Display_Num(j,0);
    100. }
    101. Display_Num(1,usasPkg.shumaguan2|0x80);
    102. while(1)
    103. {
    104. // ADJC();
    105. // GPIO_ResetBits(GPIOB,GPIO_Pin_1); //无线模式发送 SEA接口 接地
    106. USART[2]=checkdata[0];
    107. USART[3]=checkdata[1];
    108. USART[4]=checkdata[2];
    109. USART[5]=checkdata[3];
    110. USART[6]=checkdata[4];
    111. USART[7]=checkdata[5];
    112. //协议 AA BB 02 04 CC DD
    113. if(time_flag_1s==1)
    114. {
    115. time_flag_1s=0;
    116. }
    117. if(time_flag1_2s>=time_rang_b800)
    118. {
    119. if(data>=9)
    120. {
    121. data=0;
    122. }
    123. time_judge();
    124. //TM1637_Display_NoINC( 00, NumDis[data++] );
    125. //TM1637_Display_NoINC( 01, NumDis[data] );
    126. TM1637_Display_NoINC( 00, NumDis[Min.shi] );
    127. TM1637_Display_NoINC( 01, NumDis[Min.ge] );
    128. TM1637_Display_NoINC( 02, NumDis[data++]|0X80);
    129. TM1637_Display_NoINC( 03, NumDis[Min.ge]|0X80);
    130. //TM1637_Display_INC_DP();//: 显示
    131. srand(rang_num_new);
    132. usasPkg.rang_num1= rand()%10 +1; //产生一个30到50的随机数
    133. rang_num_new=usasPkg.rang_num1;
    134. time_flag1_2s=0;
    135. }
    136. if(time_flag2_2s>=time_rang_b1000)
    137. {
    138. srand(rang_num_old);
    139. rang_num= rand()%10 +1; //产生一个30到50的随机数
    140. rang_num_old=rang_num;
    141. // TM1637_Display_INC();//固定显示 0 1 : 2 3
    142. TM1637_Display_NoINC( 02, NumDis[data]|0X00);//:闪烁
    143. TM1637_Display_NoINC( 03, NumDis[data]|0X00);
    144. time_flag2_2s=0;
    145. }
    146. if(time_flag3_2s>=time_rang_b1000+time_rang_b2000+time_rang_b300+time_rang_b800)
    147. {
    148. srand(rang_num_new1);
    149. usasPkg.rang_num2= rand()%10+1; //产生一个0到10的随机数
    150. rang_num_new1=usasPkg.rang_num2;
    151. if(usasPkg.rang_num2>=3)
    152. {
    153. usasPkg.rang_num2=2;
    154. }
    155. time_flag3_2s=0;
    156. }//if
    157. }//while
    158. }//main
    159. /*************************************************************
    160. * 名称 : time_judge( void )
    161. * 功能 : 判断时间变化
    162. * 输入 : void
    163. * 输出 : 无
    164. **************************************************************/
    165. void time_judge( void )
    166. {
    167. if(++sec == 60) //60秒
    168. {
    169. sec = 0;
    170. if((Hour.shi || Hour.ge || Min.shi || Min.ge) && (--Min.ge <= -1))
    171. {
    172. Min.ge = 9;
    173. if((Hour.shi) ||(Hour.ge) && (--Min.shi <= -1))
    174. {
    175. Min.shi = 5;
    176. if(Hour.shi && (--Hour.ge <= -1))
    177. {
    178. Hour.ge = 9;
    179. if(--Hour.shi <= -1)
    180. {
    181. Hour.shi = 0;
    182. }
    183. }
    184. else
    185. if((!Hour.shi) && (--Hour.ge <= -1))
    186. {
    187. Hour.ge = 0;
    188. }
    189. }
    190. else
    191. if((!Hour.shi) && (!Hour.ge) && (--Min.shi <= -1))
    192. {
    193. Min.shi = 0;
    194. }
    195. }
    196. else
    197. if(((!Hour.shi) && (!Hour.ge) && (!Min.shi) ) && (Min.ge <= -1))
    198. {
    199. Min.ge = 0;
    200. }
    201. }
    202. }
    203. u16 STMFLASH_ReadHalfWord(u32 faddr)
    204. {
    205. return *(u16*)faddr;
    206. }
    207. u16 C;
    208. //从指定地址开始读出指定长度的数据
    209. void STMFLASH_Read()
    210. {
    211. C=STMFLASH_ReadHalfWord(0x08002000);//读取2个字节
    212. }
    213. void STMFLASH_Write(u16 NumToWrite)
    214. {
    215. FLASH_Unlock(); //解锁
    216. FLASH_ErasePage(0x08002000);//擦除这个扇区
    217. FLASH_ProgramHalfWord(0x08002000, NumToWrite);//写入16位数据
    218. // FLASH_ProgramOptionByteData(0x08002000,NumToWrite);//写入8位数据
    219. FLASH_Lock();//上锁
    220. }

  • 相关阅读:
    Python实现猎人猎物优化算法(HPO)优化循环神经网络分类模型(LSTM分类算法)项目实战
    java-net-php-python-jsp学生社团信息演示录像2019计算机毕业设计程序
    Ubuntu下运行adb devices找不到设备的问题
    全量知识系统问题及SmartChat给出的答复 之18 生存拓扑控制+因子分析实现自然语言处理中的特征提取及语义关联
    Qt基础 界面镜像
    【Jetpack】Navigation 导航组件 ① ( Navigation 引入 | Navigation 特点 | Navigation 重要组件 | Navigation 使用流程 )
    市场逆风中,海尔智家如何续写增长故事
    使用 Nginx 实现 URL 的重定向
    https加密协议全过程(结合全站文章,最简单直观的小白文)
    Python实现决策树回归模型(DecisionTreeRegressor算法)并应用网格搜索算法调优项目实战
  • 原文地址:https://blog.csdn.net/qq_36958104/article/details/125524092