久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1611|回復(fù): 0
收起左側(cè)

STM32單片機(jī)驅(qū)動(dòng)10個(gè)74hc595仿真程序

[復(fù)制鏈接]
ID:492633 發(fā)表于 2024-9-1 18:17 | 顯示全部樓層 |閱讀模式
屏幕截圖 2024-09-01 181347.png 屏幕截圖 2024-09-01 181327.png 屏幕截圖 2024-09-01 181202.png
  1. #include "595.h"
  2. #include "gpio.h"
  3. #include "stm32f1xx_hal.h"




  4. /*引腳定義*/

  5. #define DS_H()   HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_SET);//高電平
  6. #define DS_L()   HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_RESET);//低電平

  7. #define SHCP_H()   HAL_GPIO_WritePin(GPIOB, SHCP_Pin, GPIO_PIN_SET);//高電平
  8. #define SHCP_L()   HAL_GPIO_WritePin(GPIOB, SHCP_Pin, GPIO_PIN_RESET);//低電平

  9. #define STCP_H()  HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);//高電平
  10. #define STCP_L()  HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);//低電平


  11. /*
  12. 16  VCC          電源              2V-6V
  13. 15  QA           并行輸出          QB QC....QH
  14. 14  SI/DS        DATA             串行數(shù)據(jù)輸入
  15. 13  OE_          輸出使能          PWM控制亮度
  16. 12  RCK/STCP     CS               輸出到鎖存器時(shí)鐘
  17. 11  SCK/SHCP     CLK              DATA輸入時(shí)鐘
  18. 10  SCLR/MR      低電平清零        接VCC
  19. 9  SQH/Q7S       串行數(shù)據(jù)輸出       接下一個(gè)595
  20. */

  21.         



  22. void for_delay_us(uint32_t nus);
  23. void hc595_init();          //595初始化
  24. void hc595_out_enable();    //595使能輸出
  25. void hc595_send_byte(uint8_t outdata);    //595發(fā)送一個(gè)字節(jié)數(shù)據(jù)
  26. void hc595_send_multi_byte(uint8_t *ddata,uint16_t len);    //595發(fā)送多個(gè)數(shù)據(jù),ddata為發(fā)送數(shù)據(jù)指針,len為長(zhǎng)度



  27. //========================================================================
  28. // 描述: 實(shí)現(xiàn)延時(shí)us.
  29. // 參數(shù): none.
  30. // 返回: none.
  31. //========================================================================
  32. void for_delay_us(uint32_t nus)
  33. {
  34. uint32_t Delay = nus * 168/4;
  35. do
  36. {
  37. //  __NOP();
  38. }
  39. while (Delay --);
  40. }

  41. //========================================================================
  42. // 描述: 595初始化引腳.
  43. // 參數(shù): none.
  44. // 返回: none.
  45. //========================================================================
  46. void hc595_init()
  47. {        
  48.      //引腳初始化
  49.     DS_L();
  50.           STCP_L();
  51.           SHCP_L();
  52. }

  53. //========================================================================
  54. // 描述: 595使能輸出.
  55. // 參數(shù): none.
  56. // 返回: none.
  57. //========================================================================
  58. void hc595_out_enable()
  59. {
  60.     STCP_L();
  61.    for_delay_us(5);        // 適當(dāng)延時(shí)        
  62.     STCP_H();
  63.     for_delay_us(5);        // 適當(dāng)延時(shí)        
  64.     STCP_L();
  65. }

  66. //========================================================================
  67. // 描述: 595發(fā)送8位數(shù)據(jù).
  68. // 參數(shù): 8位數(shù)據(jù).
  69. // 返回: none.
  70. //========================================================================
  71. void hc595_send_byte(uint8_t outdata)
  72. {
  73.     uint8_t i;
  74.     for(i=0;i<8;i++)  //將8位數(shù)據(jù)按位發(fā)送,先發(fā)高字節(jié)再發(fā)低字節(jié)
  75.         {      
  76.         if((outdata&0x80)==0x80)
  77.             {
  78.             DS_H();
  79.         }
  80.             else
  81.             {
  82.             DS_L();
  83.         }
  84.         SHCP_L(); //時(shí)鐘線低電平
  85.         SHCP_H(); //時(shí)鐘線高電平
  86.         outdata = outdata<<1;
  87.     }
  88. }

  89. //========================================================================
  90. // 描述: 595發(fā)送數(shù)組.
  91. // 參數(shù): 數(shù)組地址,數(shù)據(jù)長(zhǎng)度.
  92. // 返回: none.
  93. //========================================================================
  94. void hc595_send_multi_byte(uint8_t *ddata,uint16_t len)
  95. {
  96.     uint16_t i;
  97.     for(i=0;i<len;i++)
  98.         {
  99.         hc595_send_byte(ddata[i]);
  100.     }
  101.     // hc595_out_enable();
  102. }

  103. //#endif






  104. /*
  105. #define unchar unsigned char  
  106. #define unint unsigned int  
  107. unsigned char table[10];  //定義10個(gè)595的變量緩存
  108. void datout(unsigned char add,dat) //595輸出函數(shù),一次輸出16位         add595選擇,dat數(shù)據(jù)
  109. {
  110.         unsigned char i,j,temp;
  111.         table[add]=dat;
  112.         for(j=0;j<10;j++)                        //一次輸出10個(gè)值
  113.         {
  114.                 temp=table[j];
  115.                 for(i=0;i<8;i++)
  116.                 {
  117.                          temp=temp>>1;
  118.                          sh_cp=0;
  119.                          ds=CY;
  120.                          sh_cp=1;
  121.                 }
  122.         }
  123.         st_cp=0;
  124.         st_cp=1;
  125. }


  126. void main()
  127. {
  128.         P2=0xff;
  129.         while(1)
  130.         {
  131.                 run();
  132.                 datout(0,0x00);//第十個(gè)595 輸出8         
  133.                 datout(1,0xFF);//第九個(gè)595 輸出7
  134.                 datout(2,0xfe);//第八個(gè)595 輸出6  
  135.                 datout(3,0xfd);//第七個(gè)595 輸出5
  136.                 datout(4,0xfb);//第六個(gè)595 輸出4   
  137.                
  138.                 datout(5,0xf7);//第五個(gè)595 輸出8
  139.                 datout(6,0xef);//第四個(gè)595 輸出7  
  140.                 datout(7,0xdf);//第三個(gè)595 輸出6                 
  141.                 datout(8,0xd9);//第二個(gè)595 聯(lián)級(jí)第二個(gè)其余以此類推,輸出11111101                 
  142.                 datout(9,0x80);//第一個(gè)595 單片機(jī)連接的第一個(gè),輸出11111110
  143. */

  144. /* USER CODE BEGIN Header */
  145. /**
  146.   ******************************************************************************
  147.   * @file           : main.c
  148.   * @brief          : Main program body
  149.   ******************************************************************************
  150.   * @attention
  151.   *
  152.   * Copyright (c) 2024 STMicroelectronics.
  153.   * All rights reserved.
  154.   *
  155.   * This software is licensed under terms that can be found in the LICENSE file
  156.   * in the root directory of this software component.
  157.   * If no LICENSE file comes with this software, it is provided AS-IS.
  158.   *
  159.   ******************************************************************************
  160.   */
  161. /* USER CODE END Header */
  162. /* Includes ------------------------------------------------------------------*/
  163. #include "main.h"
  164. #include "usart.h"
  165. #include "gpio.h"

  166. /* Private includes ----------------------------------------------------------*/
  167. /* USER CODE BEGIN Includes */
  168. #include "stdio.h"
  169. #include "595.h"

  170. /* USER CODE END Includes */

  171. /* Private typedef -----------------------------------------------------------*/
  172. /* USER CODE BEGIN PTD */

  173. /* USER CODE END PTD */

  174. /* Private define ------------------------------------------------------------*/
  175. /* USER CODE BEGIN PD */
  176. //#define DS(n)  (n?HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_SET):HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_RESET));
  177. #define LED_H()   HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_SET);//高電平
  178. #define LED_L()   HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_RESET);//低電平

  179. /*
  180. #define DS_H()   HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_SET);//高電平
  181. #define DS_L()   HAL_GPIO_WritePin(GPIOB, DS_Pin, GPIO_PIN_RESET);//低電平

  182. #define SHCP_H()   HAL_GPIO_WritePin(GPIOB, SHCP_Pin, GPIO_PIN_SET);//高電平
  183. #define SHCP_L()   HAL_GPIO_WritePin(GPIOB, SHCP_Pin, GPIO_PIN_RESET);//低電平

  184. #define STCP_H()  HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);//高電平
  185. #define STCP_L()  HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);//低電平
  186. */

  187. #define EN_H()  HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_SET);//高電平
  188. #define EN_L()  HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_RESET);//低電平


  189. /* USER CODE END PD */

  190. /* Private macro -------------------------------------------------------------*/
  191. /* USER CODE BEGIN PM */

  192. /* USER CODE END PM */

  193. /* Private variables ---------------------------------------------------------*/

  194. /* USER CODE BEGIN PV */

  195. /* USER CODE END PV */

  196. /* Private function prototypes -----------------------------------------------*/
  197. void SystemClock_Config(void);
  198. /* USER CODE BEGIN PFP */

  199. /* USER CODE END PFP */

  200. /* Private user code ---------------------------------------------------------*/
  201. /* USER CODE BEGIN 0 */




  202. /** 595數(shù)組輸出 **/
  203. uint8_t BUF[10]={
  204.         0xfe, //1路11111110
  205.         0xfd, //2路11111101
  206.         0xfb, //3路11111011
  207.         0x7f, //4路11110111
  208.         0x03, //5路11101111
  209.         0xf7, //6路11011111
  210.         0x10, //7路10111111
  211.         0xdd, //8路01111111
  212.         0x02, //9路
  213.         0x08  //10路
  214.       };

  215. void EN() //控制595端口使能輸出
  216. {
  217.         HAL_Delay(1000);
  218.         EN_L();
  219. }

  220. void out()//控制LED輸出
  221. {

  222.         LED_H();
  223.         HAL_Delay(10);
  224.         LED_L();
  225.         HAL_Delay(50);

  226.         }
  227.                         
  228. void setup()
  229. {
  230.   //控制595端口輸出
  231.   //595 OE引腳接地使能,DS,STCP,SHCP根據(jù)實(shí)際情況連接對(duì)應(yīng)引腳
  232.   //595 支持級(jí)聯(lián),數(shù)組第一個(gè)字節(jié)最先發(fā)送
  233.   hc595_init();//HC595初始化
  234.   hc595_send_multi_byte(BUF,10);//595發(fā)送多個(gè)數(shù)據(jù)(級(jí)聯(lián)第一個(gè)595在連接多個(gè)時(shí)會(huì)變成最后一個(gè))
  235.   hc595_out_enable();//595使能輸出
  236. }


  237. /* USER CODE END 0 */

  238. /**
  239.   * @brief  The application entry point.
  240.   * @retval int
  241.   */
  242. int main(void)
  243. {

  244.   /* USER CODE BEGIN 1 */

  245.   /* USER CODE END 1 */

  246.   /* MCU Configuration--------------------------------------------------------*/

  247.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  248.   HAL_Init();

  249.   /* USER CODE BEGIN Init */

  250.   /* USER CODE END Init */

  251.   /* Configure the system clock */
  252.   SystemClock_Config();

  253.   /* USER CODE BEGIN SysInit */

  254.   /* USER CODE END SysInit */

  255.   /* Initialize all configured peripherals */
  256.   MX_GPIO_Init();
  257.   MX_USART1_UART_Init();
  258.   /* USER CODE BEGIN 2 */
  259.         
  260.    // EN();//控制595輸出端口使能


  261.     //setup();
  262.                
  263.                 printf("初始化成功...\r\n");
  264.   /* USER CODE END 2 */

  265.   /* Infinite loop */
  266.   /* USER CODE BEGIN WHILE */
  267.   while (1)
  268.   {
  269.     /* USER CODE END WHILE */

  270.     /* USER CODE BEGIN 3 */
  271.                 printf("運(yùn)行正常...\r\n");
  272.                 EN_L(); //打開595輸出
  273.                 setup();  //發(fā)送數(shù)據(jù)
  274.           out();   //led燈閃爍
  275.                
  276.                
  277.     }

  278.   /* USER CODE END 3 */
  279. }

  280. /**
  281.   * @brief System Clock Configuration
  282.   * @retval None
  283.   */
  284. void SystemClock_Config(void)
  285. {
  286.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  287.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  288.   /** Initializes the RCC Oscillators according to the specified parameters
  289.   * in the RCC_OscInitTypeDef structure.
  290.   */
  291.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  292.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  293.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  294.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  295.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  296.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
  297.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  298.   {
  299.     Error_Handler();
  300.   }

  301.   /** Initializes the CPU, AHB and APB buses clocks
  302.   */
  303.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  304.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  305.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  306.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  307.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  308.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  309.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  310.   {
  311.     Error_Handler();
  312.   }
  313. }

  314. /* USER CODE BEGIN 4 */

  315. /* USER CODE END 4 */

  316. /**
  317.   * @brief  This function is executed in case of error occurrence.
  318.   * @retval None
  319.   */
  320. void Error_Handler(void)
  321. {
  322.   /* USER CODE BEGIN Error_Handler_Debug */
  323.   /* User can add his own implementation to report the HAL error return state */
  324.   __disable_irq();
  325.   while (1)
  326.   {
  327.   }
  328.   /* USER CODE END Error_Handler_Debug */
  329. }

  330. #ifdef  USE_FULL_ASSERT
  331. /**
  332.   * @brief  Reports the name of the source file and the source line number
  333.   *         where the assert_param error has occurred.
  334.   * @param  file: pointer to the source file name
  335.   * @param  line: assert_param error line source number
  336.   * @retval None
  337.   */
  338. void assert_failed(uint8_t *file, uint32_t line)
  339. {
  340.   /* USER CODE BEGIN 6 */
  341.   /* User can add his own implementation to report the file name and line number,
  342.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  343.   /* USER CODE END 6 */
  344. }
  345. #endif /* USE_FULL_ASSERT */
復(fù)制代碼





仿真程序: 595fz.7z (5.18 MB, 下載次數(shù): 11)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产a级毛片 | 免费观看羞羞视频网站 | 毛片一级片 | 久久高清| 91五月婷蜜桃综合 | 国产网站在线免费观看 | 国产成人精品一区二区三区视频 | 国产精品精品 | 亚洲精品一区在线 | 神马福利 | 毛片一级黄色 | 婷婷桃色网 | 一区二区三区精品视频 | 日本激情视频网 | 亚洲成人中文字幕 | 国产精品久久久久久婷婷天堂 | 亚洲欧美激情四射 | www.久久艹 | 亚洲一区成人 | 男人天堂网址 | 亚洲一区亚洲二区 | 亚洲视频中文字幕 | 欧美一区日韩一区 | 久草色播| 五月综合激情婷婷 | 伊人网伊人 | 久久久久久久久久性 | 久久精品中文字幕 | 亚洲精品一区二区三区四区高清 | 国产精品久久久久久久久久久久久久 | 欧美精品v国产精品v日韩精品 | 欧美日韩高清免费 | av在线成人| 91精品国产91久久久久久吃药 | 精品婷婷| 91精品国产自产精品男人的天堂 | 欧美亚洲另类丝袜综合网动图 | 国产日韩在线观看一区 | 亚洲三区视频 | 国产欧美日韩精品一区二区三区 | 久久久久精 |