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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6955|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

STC15W408AS單片機(jī)驅(qū)動(dòng)74hc595源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:319065 發(fā)表于 2018-6-14 20:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:

  1. #include "delay.h"
  2. #include "key.h"
  3. #include "hc595.h"
  4. #include "intrins.h "


  5. ///////////////////////////引腳定義///////////////////////////////
  6. sbit Hc595_Sck_P11 = P3^2; //輸入串行移位時(shí)鐘脈沖 sh_cp_595
  7. sbit Hc595_Rck_P12 = P3^3; //輸出鎖存器控制脈沖 st_cp_595
  8. //sbit Hc595_Oe_P13 = P1^5; //8 位并行輸出使能禁能(高阻態(tài))
  9. sbit Hc595_Ser_P14 = P3^4; //串行數(shù)據(jù)輸入線

  10. unsigned char Hc595_Datas[6] = {0x00U}; //存放6個(gè)數(shù)碼管顯示的數(shù)據(jù)
  11. unsigned long Hc595_Count = 0U;//顯示定時(shí)計(jì)數(shù),
  12. unsigned long Hc595_Time_Count = 0U;//定時(shí)器超時(shí)計(jì)數(shù)


  13. unsigned long hc595_time_count_temp = 0U;//臨時(shí)存儲(chǔ)
  14. unsigned long hc595_time_count_temp_1 = 0U;//臨時(shí)存儲(chǔ)
  15. unsigned long hc595_time_count_temp_2 = 0U;//臨時(shí)存儲(chǔ)

  16. unsigned char Hc595_Led_Code[]={
  17.                                                                 0x3FU, // 0
  18.                                                                 0x06U, // 1
  19.                                                                 0x5BU, // 2
  20.                                                                 0x4FU, // 3
  21.                                                                 0x66U, // 4
  22.                                                                 0x6DU, // 5
  23.                                                                 0x7DU, // 6
  24.                                                                 0x07U, // 7
  25.                                                                 0x7FU, // 8
  26.                                                                 0x6FU, // 9
  27.                                                                 0x77U, // A
  28.                                                                 0x7CU, // B
  29.                                                                 0x39U, // C
  30.                                                                 0x5EU, // D
  31.                                                                 0x79U, // E
  32.                                                                 0x71U, // F
  33.                                                                 0x00U  //0x10:表示不顯示
  34.                                                         };//共陽極數(shù)碼管

  35. /////////////////////////////////////////////////外部調(diào)用函數(shù)/////////////////////////////////////////////
  36. /***********************************************************************************************
  37. //功能:單個(gè)數(shù)據(jù)往hc595發(fā)送,串行輸入數(shù)據(jù)(SER)移入寄存器
  38. //輸入:unsigned char SendVal:要發(fā)送的數(shù)據(jù)
  39. //輸出:無
  40. //備注:無
  41. //日期:2018.06.05
  42. *************************************************************************************************/
  43. void Hc595SendData(unsigned char SendVal)//往hc595發(fā)送數(shù)據(jù),串行輸入數(shù)據(jù)(SER)移入寄存器
  44. {
  45.         unsigned char i;
  46.         for(i = 0U; i < 8U; i++)
  47.         {
  48.                 if((SendVal <<i ) & 0x80U)
  49.                 {
  50.                         Hc595_Ser_P14 = HC595_HIGH;
  51.                 }
  52.                 else
  53.                 {
  54.                         Hc595_Ser_P14 = HC595_LOW;
  55.                 }
  56.                 //由低電平跳為高電平,產(chǎn)生上升沿,串行輸入數(shù)據(jù)(SER)移入寄存器
  57.                 Hc595_Sck_P11 = HC595_HIGH;
  58.                 _nop_();
  59.                 _nop_();
  60.                 Hc595_Sck_P11 = HC595_LOW;
  61.         }
  62. }

  63. /***********************************************************************************************
  64. //功能:數(shù)據(jù)顯示.RCK_595 產(chǎn)生上升沿,(輸出數(shù)據(jù)用于引腳)
  65. //輸入:無
  66. //輸出:無
  67. //備注:無
  68. //日期:2018.06.05
  69. *************************************************************************************************/
  70. void Hc595ShowData(void)//RCK_595 產(chǎn)生上升沿,(輸出數(shù)據(jù)用于引腳)
  71. {
  72.         Hc595_Rck_P12 = HC595_LOW;
  73.         _nop_();
  74.         _nop_();
  75.         Hc595_Rck_P12 = HC595_HIGH;
  76.         _nop_();
  77.         _nop_();
  78.         Hc595_Rck_P12 = HC595_LOW;
  79.         _nop_();
  80.         _nop_();
  81. }                                                
  82.         
  83. /***********************************************************************************************
  84. //功能:6個(gè)數(shù)據(jù)級(jí)聯(lián)顯示
  85. //輸入:無
  86. //輸出:無
  87. //備注:無
  88. //日期:2018.06.05
  89. *************************************************************************************************/
  90. void Hc595LedDisplayN(void)
  91. {
  92.         unsigned char i;//,j;
  93.         unsigned char movebit[6];
  94.         //Hc595_Oe_P13 = HC595_LOW; //選中數(shù)碼管
  95.         for(i = 0U; i < 6U; i++)
  96.         {
  97.                 movebit[i] = Hc595_Led_Code[Hc595_Datas[i]];
  98.         }
  99.         // P1 = 0U;
  100.         Delay(1U);
  101.         for(i = 0U; i< 6U; i++) //數(shù)據(jù)移位
  102.         {
  103.                 if(i == 1U)//第二個(gè)字段小數(shù)點(diǎn)常亮處理
  104.                 {
  105.                         Hc595SendData(movebit[i] & 0x7FU );//共陽極低電平點(diǎn)亮對應(yīng)的二極管
  106.                 }
  107.                 else
  108.                 {
  109.                         Hc595SendData(movebit[i]);
  110.                 }
  111.                
  112.                 /*test = movebit[i];
  113.                 for(j = 0U;j < 8U; j++)
  114.                 {
  115.                         testb = (test & 0x80U);
  116.                         test = (test << 1U);
  117.                         if(testb)
  118.                         {
  119.                                 Hc595_Ser_P14 = HC595_HIGH;
  120.                         }
  121.                         else
  122.                         {
  123.                                 Hc595_Ser_P14 = HC595_LOW;
  124.                         }
  125.                         Hc595_Sck_P11 = HC595_HIGH;
  126.                         _nop_();
  127.                         _nop_();
  128.                         _nop_();
  129.                         Hc595_Sck_P11 = HC595_LOW;
  130.                 } //數(shù)據(jù)移位*/
  131.         }
  132.         
  133.         //顯示數(shù)據(jù),
  134.         Hc595ShowData();
  135.         /*Hc595_Rck_P12 = HC595_LOW;
  136.         _nop_();
  137.         _nop_();
  138.         _nop_();
  139.         Hc595_Rck_P12 = HC595_HIGH;
  140.         _nop_();
  141.         _nop_();
  142.         _nop_();
  143.         Hc595_Rck_P12 = HC595_LOW;
  144.         _nop_();
  145.         _nop_();
  146.         _nop_();*/
  147. }

  148. /***********************************************************************************************
  149. //功能:定時(shí)器計(jì)數(shù)處理函數(shù),并將對應(yīng)的數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制數(shù)處理
  150. //輸入:無
  151. //輸出:無
  152. //備注:應(yīng)用于中斷中
  153. //日期:2018.06.05
  154. *************************************************************************************************/
  155. void Hc595TimerCountHandle(void)
  156. {
  157.         unsigned char hc595_key_status = 0U;//按鍵狀態(tài)
  158.         unsigned char hc595_key_count_modle = 0U;//檔位
  159.         unsigned char hc595_stop_display_flag = 0U;
  160.         
  161.         hc595_key_count_modle = KeyCheckCount();//取按鍵設(shè)置的檔位顯示
  162.         hc595_key_status = KeyCheckStatus();//獲取按鍵狀態(tài)
  163.         switch(hc595_key_status)
  164.         {        
  165.                 case KeySwitchModeTimeOutInit://上電初始化狀態(tài),可用于切換檔位
  166.                         Hc595_Datas[0] = hc595_key_count_modle;//取按鍵設(shè)置的檔位顯示
  167.                         Hc595_Datas[1] = 0x10U;//不顯示,全關(guān)處理
  168.                         Hc595_Datas[2] = 0x10U;//不顯示,全關(guān)處理
  169.                         Hc595_Datas[3] = 0x10U;//不顯示,全關(guān)處理
  170.                         Hc595_Datas[4] = 0x10U;//不顯示,全關(guān)處理
  171.                         Hc595_Datas[5] = 0x10U;//不顯示,全關(guān)處理
  172.                         Hc595_Count = 0U;
  173.                         break;
  174.                 case KeyTimeCountInit://檔位設(shè)置完成后初始態(tài),開啟計(jì)數(shù)
  175.                 case KeyTimeCountStopClear://按鍵計(jì)時(shí)清零狀態(tài)
  176.                 case KeyTimeCountOver://計(jì)時(shí)結(jié)束
  177.                 case KeyTimeCountOverStop://超出后停止?fàn)顟B(tài)
  178.                 case KeyTimeCountOverInit_1://超出后停止?fàn)顟B(tài)
  179.                 case KeyTimeCountOverInit://超出后初始化狀態(tài)
  180.                         Hc595_Count = 0U;
  181.                         Hc595_Datas[0] = 0x00U;//全險(xiǎn)0
  182.                         Hc595_Datas[1] = 0x00U;//全險(xiǎn)0
  183.                         Hc595_Datas[2] = 0x00U;//全險(xiǎn)0
  184.                         Hc595_Datas[3] = 0x00U;//全險(xiǎn)0
  185.                         Hc595_Datas[4] = 0x00U;//全險(xiǎn)0
  186.                         Hc595_Datas[5] = 0x00U;//全險(xiǎn)0
  187.                         break;
  188.                 case KeyTimeCountStart://開啟計(jì)數(shù)
  189.                         //根據(jù)檔位處理時(shí)間

  190.                         Hc595_Count ++;                                
  191.                         hc595_time_count_temp_2 = Hc595_Count;
  192.                         //顯示
  193.                         if(hc595_key_count_modle == 5U)//第5檔只顯示時(shí)間
  194.                         {
  195.                                 if(Hc595_Count >= 600000U)
  196.                                 {
  197.                                         Hc595_Count = 0U;
  198.                                         Key.Key_Status = KeyTimeCountOver;//計(jì)時(shí)結(jié)束
  199.                                 }
  200.                                 //分鐘
  201.                                 Hc595_Datas[0] = (Hc595_Count / 6000U) / 10U;
  202.                                 Hc595_Datas[1] = (Hc595_Count / 6000U) % 10U;
  203.                                 //秒
  204.                                 Hc595_Datas[2] = (Hc595_Count % 6000U) / 1000U;
  205.                                 Hc595_Datas[3] = (Hc595_Count % 1000U) / 100U;
  206.                                 //毫秒
  207.                                 Hc595_Datas[4] = (Hc595_Count % 100U)/10U;
  208.                                 Hc595_Datas[5] = (Hc595_Count % 10U)/1U;
  209.                         }
  210.                         else
  211.                         {                                
  212.                                 hc595_time_count_temp = Hc595_Count;
  213.                                 if(hc595_key_count_modle == 0U)
  214.                                 {
  215.                                         hc595_time_count_temp = (Hc595_Count*5 + Hc595_Count%5);//400us                                                                                
  216.                                 }
  217.                                 else if(hc595_key_count_modle == 1U)
  218.                                 {
  219.                                         hc595_time_count_temp = (Hc595_Count*4 + Hc595_Count%4);
  220.                                 }
  221.                                 else if(hc595_key_count_modle == 2U)
  222.                                 {
  223.                                         hc595_time_count_temp = (Hc595_Count*3 + Hc595_Count%3);
  224.                                 }
  225.                                 else if(hc595_key_count_modle == 3U)
  226.                                 {
  227.                                         hc595_time_count_temp = (Hc595_Count*2 + Hc595_Count%2);
  228.                                 }
  229.                                 else if(hc595_key_count_modle == 4U)
  230.                                 {
  231.                                         hc595_time_count_temp = (Hc595_Count + Hc595_Count);
  232.                                 }
  233.                                 
  234.                                 //if((hc595_key_count_modle == 0U) || (hc595_key_count_modle == 1U) || (hc595_key_count_modle == 4U))
  235.                                 {
  236.                                         if(hc595_time_count_temp >= 10000U)
  237.                                         {
  238.                                                 Hc595_Count = 0U;
  239.                                                 hc595_time_count_temp = 0U;
  240.                                                 Key.Key_Status = KeyTimeCountOver;//計(jì)時(shí)結(jié)束
  241.                                         }

  242.                                         Hc595_Datas[0] = (Hc595_Count % 10000U)/1000U;
  243.                                         Hc595_Datas[1] = (Hc595_Count % 1000U)/100U;
  244.                                         Hc595_Datas[2] = (hc595_time_count_temp % 100U)/10U;
  245.                                         Hc595_Datas[3] = (hc595_time_count_temp % 10U)/1U;
  246.                                         Hc595_Datas[4] = (hc595_time_count_temp % 100U)/10U;
  247.                                         Hc595_Datas[5] = (hc595_time_count_temp % 10U)/1U;
  248.                                 }
  249.                                 hc595_time_count_temp_1 = ((unsigned long)Hc595_Datas[0])*100000U + ((unsigned long)Hc595_Datas[1])*10000U + ((unsigned long)Hc595_Datas[2])*1000U + ((unsigned long)Hc595_Datas[3])*100U + ((unsigned long)Hc595_Datas[4])*10U + (unsigned long)Hc595_Datas[4];
  250.                                 
  251.                         }
  252.                         break;
  253.                 case KeyTimeCountStop://停止計(jì)數(shù)狀態(tài)
  254.                         if(hc595_key_count_modle !=        5U)
  255.                         {                                
  256.                                 switch(hc595_key_count_modle)
  257.                                 {
  258.                                         case 0U:
  259.                                                 if((hc595_time_count_temp_1 >= 99990U) && (hc595_time_count_temp_1 <= 100000U))
  260.                                                 {
  261.                                                         hc595_time_count_temp = 100000U;
  262.                                                         hc595_stop_display_flag = 1U;
  263.                                                 }
  264.                                                 break;
  265.                                         case 1U:
  266.                                                 if((hc595_time_count_temp_1 >= 99970U) && (hc595_time_count_temp_1 <= 100000U))
  267.                                                 {
  268.                                                         hc595_time_count_temp = 100000U;
  269.                                                         hc595_stop_display_flag = 1U;
  270.                                                 }
  271.                                                 break;
  272.                                         case 2U:
  273.                                                 if((hc595_time_count_temp_1 >= 99950U) && (hc595_time_count_temp_1 <= 100000U))
  274.                                                 {
  275.                                                         hc595_time_count_temp = 100000U;
  276.                                                         hc595_stop_display_flag = 1U;
  277.                                                 }
  278.                                                 break;
  279.                                         case 3U:
  280.                                                 if((hc595_time_count_temp_1 >= 99910U) && (hc595_time_count_temp_1 <= 100000U))
  281.                                                 {
  282.                                                         hc595_time_count_temp = 100000U;
  283.                                                         hc595_stop_display_flag = 1U;
  284.                                                 }
  285.                                                 break;
  286.                                         case 4U:
  287.                                                 if((hc595_time_count_temp_1 >= 98000U) && ((hc595_time_count_temp_1 <= 100000U)))
  288.                                                 {
  289.                                                         hc595_time_count_temp = 100000U;
  290.                                                         hc595_stop_display_flag = 1U;
  291.                                                 }
  292.                                                 break;
  293.                                         default:
  294.                                                 break;
  295.                                 }
  296.                                 if(hc595_stop_display_flag == 1U)
  297.                                 {
  298.                                         Hc595_Datas[0] = (hc595_time_count_temp % 1000000U)/100000U;
  299.                                         Hc595_Datas[1] = (hc595_time_count_temp % 100000U)/10000U;
  300.                                         Hc595_Datas[2] = (hc595_time_count_temp % 10000U)/1000U;
  301.                                         Hc595_Datas[3] = (hc595_time_count_temp % 1000U)/100U;
  302.                                         Hc595_Datas[4] = (hc595_time_count_temp % 100U)/10U;
  303.                                         Hc595_Datas[5] = (hc595_time_count_temp % 10U)/1U;
  304.                                 }
  305.                         }
  306.                         
  307.                         Hc595_Count = 0U;
  308.                         
  309.                         break;
  310.                
  311.                 default:
  312.                         break;
  313.         }
  314.         
  315.         Hc595LedDisplayN();//數(shù)據(jù)顯示處理
  316. }
復(fù)制代碼




  1. #include "stc15w408as.h"

  2. #include "hc595.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "timer0.h"

  6. int main(void)
  7. {
  8.         Timer0Init();
  9.         KeyInit();
  10.         
  11.         SYS_INTERUPT_EN();
  12.         while(1)
  13.         {
  14.                 //定時(shí)器0處理
  15.                 if(Timer0CheckIntFlag() == 1U)
  16.                 {
  17.                         Timer0ClearIntFlag();
  18.                         //KeyInitTimeOutHandle();
  19.                         //Hc595TimerCountHandle();
  20.                 }
  21.                 //按鍵處理
  22.                 if(KeyCheckUpDownStatus() == 1U)
  23.                 {
  24.                         KeyClearUpDownFlag();//清除按鍵標(biāo)志
  25.                         KeyHandle();                        
  26.                 }
  27.                
  28.                 //數(shù)碼管顯示處理
  29.                
  30.         }
  31.         return 0U;
  32. }

復(fù)制代碼

所有資料51hei提供下載:
STC15W408AS_V1.3.zip (124.7 KB, 下載次數(shù): 157)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:753786 發(fā)表于 2020-5-19 13:06 | 只看該作者
謝謝分離,,,我正好需要
回復(fù)

使用道具 舉報(bào)

板凳
ID:574338 發(fā)表于 2022-3-18 14:08 | 只看該作者
優(yōu)秀的電子作品,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

地板
ID:796531 發(fā)表于 2022-3-31 20:31 | 只看該作者
謝謝分享,我正好需要這個(gè)測試
回復(fù)

使用道具 舉報(bào)

5#
ID:634830 發(fā)表于 2022-6-11 20:55 | 只看該作者
原理圖有嗎
回復(fù)

使用道具 舉報(bào)

6#
ID:155424 發(fā)表于 2022-6-12 17:39 | 只看該作者

優(yōu)秀的電子作品,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品一 | 亚洲成人一区 | 欧美激情视频一区二区三区在线播放 | 国产最新网址 | 国产二区在线播放 | 成人性视频免费网站 | 欧美一区二区三区大片 | 欧美一级做性受免费大片免费 | 欧美一区二区三区久久精品 | 日韩不卡在线 | 国产免费一级片 | 丁香婷婷综合激情五月色 | 国产精品视频一区二区三区四蜜臂 | 全免费a级毛片免费看视频免 | 国产三区在线观看视频 | 97日日碰人人模人人澡分享吧 | 国产精品a久久久久 | 拍戏被cao翻了h承欢 | 国产黄色在线观看 | 日本精品国产 | 久久天天躁狠狠躁夜夜躁2014 | 最新中文字幕在线 | 91影视| 久久精品一二三影院 | 久久久久久久一区 | 精品视频在线观看 | 懂色av色香蕉一区二区蜜桃 | 国产一区二区精品 | 一区二区国产精品 | 不用播放器看的av | 日韩一级电影免费观看 | 午夜精品视频一区 | 一区二区三区国产 | 免费一级欧美在线观看视频 | 欧美视频免费 | 欧美婷婷| 黄色片在线免费看 | 国产精品久久久久久亚洲调教 | 亚洲精品国产电影 | 国产人成精品一区二区三 | 欧美亚洲一区二区三区 |