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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2905|回復: 1
打印 上一主題 下一主題
收起左側

STM32單片機四位串行,74HC595驅動兩種不同方式數碼管顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
制作出來的實物圖如下:


單片機源程序如下:
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "smg.h"
uint8_t RecBuff[5] = {0, 0, 0, 0, 0};//定義5個數據組個綬沖讀取串口數據,所有數組數據初始化為0
int a=9;
int b=6;

int main(void)
{
        OLED_Init();
        uart_init(115200);
        
  SMG_Init();
        RecBuff[0]=a;
  RecBuff[1]=b;

        
        while(1)
                {
//                        SMG_Display(1341);
               
               
               
                LED8_Display(3,1);
                LED8_Display(2,2);
                LED8_Display(1,RecBuff[1]);
                LED8_Display(0,RecBuff[0]);
                        
//                LED8_Display(3,18);
//                LED8_Display(2,18);
//                LED8_Display(1,18);
//                LED8_Display(0,18);
                //delay_ms(1000);
         }
        
}

  1. #include "smg.h"
  2. #include "delay.h"

  3. u8 SMG_Code[] =
  4. {
  5.     // 0          1            2            3            4            5            6           7           8            9            A            b           C      d           E    F    -    Bleak White Spot
  6.     0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xBF, 0xFF, 0x00, 0x7F
  7. };//段碼

  8. void SMG_Init()
  9. {
  10.     GPIO_InitTypeDef GPIO_InitStructure;//定義結構體變量

  11.     RCC_APB2PeriphClockCmd(SMG_PORT_RCC, ENABLE);

  12.     GPIO_InitStructure.GPIO_Pin = SMG_PIN;             //要設置的IO口
  13.     GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;     //普通輸出模式
  14.     GPIO_InitStructure.GPIO_Speed =  GPIO_Speed_50MHz;; //50MHz
  15.     GPIO_Init(SMG_PORT, &GPIO_InitStructure);                /* 初始化GPIO */

  16.     GPIO_ResetBits(SMG_PORT, SMG_PIN);  //將數碼管端口拉高
  17. }





  18. u8 LED_table[19]={
  19.           //共陽數碼管段碼“0123456789AbCdEF熄滅-”
  20.    //    0    1    2     3     4     5     6     7    8      9    10(A) 11(B) 12(C) 13(D) 14(E) 15(F) 16(熄滅)17(-) 18(.)
  21.       0xC0, 0xF9, 0xA4, 0xB0 ,0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xFF, 0xBF, 0x7F };

  22.          //     0.    1.    2.    3.    4.    5.    6.    7.    8.    9.  
  23. //      0x40, 0x79, 0x24, 0x30 ,0x19, 0x12, 0x02, 0x78, 0x00, 0x10;

  24. u8 wei_table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  25. //第一位至第八位位碼


  26. /****************************************************************/
  27. //數碼動態顯示函數LED8_Display(),有形參x和y,無返回值
  28. //x表示位選擇,y表示欲顯示的數碼
  29. /****************************************************************/
  30. void LED8_Display(u8 x,u8 y)
  31. {
  32.   LED_OUT(LED_table[y]);//送出段碼
  33.   LED_OUT(wei_table[x]);//送出位碼               
  34.   SMG_RCLK=0;
  35.   SMG_RCLK=1;//RCLK產生上升沿A4
  36.   delay_ms(2);
  37. }


  38. /****************************************************************/
  39. //單字節數據串行移位函數LED_OUT(),有形參outdata用于傳入實際數據
  40. //無返回值
  41. /****************************************************************/
  42. void LED_OUT(u8 outdata)
  43. {
  44.   u8 i;
  45.   for(i=0;i<8;i++)//循環8次
  46.   {
  47.     if (outdata & 0x80)//逐一取出最高位 1000 0000 b
  48.       SMG_DIO=1;//送出“1”
  49.     else
  50.       SMG_DIO=0;//送出“0”
  51.     outdata<<=1;//執行左移一位操作
  52.     SMG_SCLK=0;
  53.     SMG_SCLK=1;//SCLK產生上升沿
  54.   }
  55. }







  56. void SMG_Output(u8 data)
  57. {
  58.     u8 i;
  59.     for (i = 0; i < 8; i++)
  60.     {
  61.         if (data & 0x80)//按位與,先發送高位
  62.         {
  63.             SMG_DIO = 1;
  64.         }
  65.         else
  66.         {
  67.             SMG_DIO = 0;
  68.         }
  69.         data <<= 1;
  70.         SMG_SCLK = 0;
  71.         SMG_SCLK = 1; //產生一個上升沿
  72.     }
  73. }

  74. void SMG_Display(int num)
  75. {
  76.     u8 digit[DIGIT_NUM], i, j;
  77.    
  78.     //將傳入的數字轉換為數組的元素
  79.     for (i = 1; i <= DIGIT_NUM; i++)
  80.     {
  81.         digit[DIGIT_NUM - i] = num % 10;
  82.         num /= 10;
  83.     }
  84.    
  85.     for (j = i = 1; i <= DIGIT_NUM; i++, j *= 2)
  86.     {
  87.         SMG_Output(SMG_Code[digit[DIGIT_NUM - i]]); //發送顯示數據
  88.         SMG_Output(j);                              //發送顯示位數
  89.         SMG_RCLK = 0;
  90.         SMG_RCLK = 1; //產生一個上升沿
  91.         delay_ms(2);  //保持一定時間,否則數碼管亮度較低
  92.     }
  93. }



  94. //int main()
  95. //{
  96. //    int Clock_MHz;
  97. //    float prev_roll;
  98. //    /*定義一個RCC_ClocksTypeDef類型的結構體*/
  99. //    RCC_ClocksTypeDef  RCC_Clock;
  100. //    /*調用RCC_GetClocksFreq獲取系統時鐘狀態*/
  101. //    RCC_GetClocksFreq(&RCC_Clock);
  102. //    Clock_MHz = RCC_Clock.SYSCLK_Frequency / 1000 / 1000;
  103. //
  104. //    uart1_init(460800);
  105. //    delay_init(Clock_MHz);
  106. //
  107. //    SMG_Init();
  108. //    while (1)
  109. //    {
  110. //        SMG_Display(2021);
  111. //    }
  112. //}

復制代碼


Keil代碼下載:
程序.7z (197.46 KB, 下載次數: 37)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:825202 發表于 2023-12-26 16:24 | 只看該作者
我按照你第一種方法寫的,但是位選沒有起作用,4個數碼管全都亮
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线一级 | 97国产爽爽爽久久久 | 日日干日日操 | 免费毛片在线 | 日本久久久一区二区三区 | 色婷婷国产精品综合在线观看 | 久久久www成人免费无遮挡大片 | 国产亚洲欧美日韩精品一区二区三区 | 国产一区二区三区视频免费观看 | 中文字幕蜜臀 | 日日干天天操 | 欧美日本在线观看 | 精品在线99| 成人av一区二区三区 | 国产视频三区 | 99精品国产一区二区三区 | 91在线电影 | 欧美亚洲视频在线观看 | 欧美一区二区三区 | 欧美精品久久 | 欧美成人a∨高清免费观看 欧美日韩中 | 精品亚洲一区二区 | 久久精品欧美一区二区三区不卡 | 粉嫩国产精品一区二区在线观看 | 久久最新 | 91一区 | 91久久国产综合久久 | 欧美日韩视频在线播放 | 大乳boobs巨大吃奶挤奶 | 日韩电影中文字幕在线观看 | 亚洲精品一区二区网址 | 国产欧美日韩一区二区三区 | 国产高清免费 | 日韩欧美一区二区三区在线播放 | 中文字幕日韩欧美 | 欧美精品一区二区三区蜜桃视频 | 香蕉av免费 | 精品久久久久久亚洲综合网 | 国产精品久久久久久久白浊 | 91麻豆精品国产91久久久久久 | 国产亚洲精品久久久久动 |