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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3103|回復: 3
收起左側

基于51單片機的紅外對管計數源程序(LCD1602顯示次數)

[復制鏈接]
ID:921711 發表于 2022-6-1 16:51 | 顯示全部樓層 |閱讀模式
1、紅外對管
紅外線對管就是紅外線發射與接收。它的發射與接收的方式有兩種,一是直射式,二是反射式。直射式指發光二極管和接收管相對安放在發射與受控物的兩端,中間相距一定距離;反射式指發光二極管和接收管并排一起,平常接收管始終無光照射,只在發光二極管發出的紅外線碰到反射物時,接收管接收到反射回來的紅外線才工作。這里我們選用的是后者
2、硬件連接
程序里面我們是用的外部中斷0,紅外對管OUT腳接單片機的P3^2腳(之前就是因為OUT腳接單片機IO口的問題耽誤了很久)
然后用的是普中的開發板

3、程序
這里只截了部分程序,需要的小伙伴自行下載

中斷

中斷


單片機源程序如下:
  1. #include <REGX52.H>
  2. #include  <math.h>     
  3. #include  <stdio.h>  
  4. #include "intrins.h"

  5. #define uchar unsigned char
  6. #define uint unsigned int       
  7.        
  8. #define DataPort P0         

  9. sbit SCL=P1^0;     
  10. sbit SDA=P1^1;  

  11. #define SlaveAddress   0x46
  12.       
  13. int count = 0;

  14. static int number;

  15. void Delay100ms()                //@11.0592MHz
  16. {
  17.         unsigned char i, j, k;

  18.         _nop_();
  19.         _nop_();
  20.         i = 5;
  21.         j = 52;
  22.         k = 195;
  23.         do
  24.         {
  25.                 do
  26.                 {
  27.                         while (--k);
  28.                 } while (--j);
  29.         } while (--i);
  30. }



  31. void Int0_Init()
  32. {
  33.         IT0=0;
  34.         EX0=1;
  35.         EA=1;
  36. }






  37. sbit LCD_RS=P2^6;
  38. sbit LCD_RW=P2^5;
  39. sbit LCD_E=P2^7;
  40. #define LCD_DataPort P0

  41. /**
  42.   * @brief  LCD1602????,12MHz?????1ms
  43.   * @param  ?
  44.   * @retval ?
  45.   */
  46. void LCD_Delay()                //@12.000MHz 1ms
  47. {
  48.         unsigned char i, j;

  49.         i = 2;
  50.         j = 239;
  51.         do
  52.         {
  53.                 while (--j);
  54.         } while (--i);
  55. }

  56. /**
  57.   * @brief  LCD1602???
  58.   * @param  Command ??????
  59.   * @retval ?
  60.   */
  61. void LCD_WriteCommand(unsigned char Command)
  62. {
  63.         LCD_RS=0;
  64.         LCD_RW=0;
  65.         LCD_DataPort=Command;
  66.         LCD_E=1;
  67.         LCD_Delay();
  68.         LCD_E=0;
  69.         LCD_Delay();
  70. }

  71. /**
  72.   * @brief  LCD1602???
  73.   * @param  Data ??????
  74.   * @retval ?
  75.   */
  76. void LCD_WriteData(unsigned char Data)
  77. {
  78.         LCD_RS=1;
  79.         LCD_RW=0;
  80.         LCD_DataPort=Data;
  81.         LCD_E=1;
  82.         LCD_Delay();
  83.         LCD_E=0;
  84.         LCD_Delay();
  85. }

  86. /**
  87.   * @brief  LCD1602?????
  88.   * @param  ?
  89.   * @retval ?
  90.   */
  91. void LCD_Init(void)
  92. {
  93.         LCD_WriteCommand(0x38);
  94.         LCD_WriteCommand(0x0C);
  95.         LCD_WriteCommand(0x06);
  96.         LCD_WriteCommand(0x01);
  97. }

  98. /**
  99.   * @brief  LCD1602??????
  100.   * @param  Line ???,??:1~2
  101.   * @param  Column ???,??:1~16
  102.   * @retval ?
  103.   */
  104. void LCD_SetCursor(unsigned char Line,unsigned char Column)
  105. {
  106.         if(Line==1)
  107.         {
  108.                 LCD_WriteCommand(0x80|(Column-1));
  109.         }
  110.         else
  111.         {
  112.                 LCD_WriteCommand(0x80|(Column-1)+0x40);
  113.         }
  114. }

  115. /**
  116.   * @brief  ???=X?Y??
  117.   */
  118. int LCD_Pow(int X,int Y)
  119. {
  120.         unsigned char i;
  121.         int Result=1;
  122.         for(i=0;i<Y;i++)
  123.         {
  124.                 Result*=X;
  125.         }
  126.         return Result;
  127. }

  128. /**
  129.   * @brief  ?LCD1602????????????
  130.   * @param  Line ?????,??:1~2
  131.   * @param  Column ?????,??:1~16
  132.   * @param  Number ??????,??:0~65535
  133.   * @param  Length ????????,??:1~5
  134.   * @retval ?
  135.   */
  136. void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  137. {
  138.         unsigned char i;
  139.         LCD_SetCursor(Line,Column);
  140.         for(i=Length;i>0;i--)
  141.         {
  142.                 LCD_WriteData('0'+Number/LCD_Pow(10,i-1)%10);
  143.         }
  144. }










  145. void main()
  146. {  
  147.    
  148.         Int0_Init();
  149.         LCD_Init();

  150.         while(1)            
  151.         {

  152.                 LCD_ShowNum(2,1,count,3);
  153.                 number = 1;
  154.                        
  155.    }
  156. }


  157. void Int0()        interrupt 0
  158. {       
  159.      if(number == 1)
  160.          {
  161.       count++;
  162.           number = 0;
  163.           Delay100ms();        //@11.0592MHz

  164.          }
  165. }
復制代碼


1

1

2

2

評分

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

查看全部評分

回復

使用道具 舉報

ID:1064693 發表于 2023-3-1 15:15 | 顯示全部樓層
你好,請問上面是完整的代碼了嗎
回復

使用道具 舉報

ID:921711 發表于 2023-8-10 10:16 | 顯示全部樓層
wei520789 發表于 2023-3-1 15:15
你好,請問上面是完整的代碼了嗎

是的,本來就不多,版主全部放出來了
回復

使用道具 舉報

ID:1075398 發表于 2025-3-3 14:24 | 顯示全部樓層
沒有電路原理圖呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久av网| 成人动漫视频网站 | 超碰免费在 | 亚洲国产成人精品女人久久久 | 日本视频一区二区三区 | 久久久人成影片一区二区三区 | 成年女人免费v片 | 久久这里只有精品首页 | 久久99蜜桃综合影院免费观看 | 免费欧美 | 欧美久久久久久久 | 国产伦一区二区三区久久 | 99re在线视频| jlzzjlzz国产精品久久 | 色性av| www在线视频 | 久久久成人免费视频 | 精品欧美黑人一区二区三区 | 蜜桃视频在线观看免费视频网站www | 成年人网站免费 | 一级黄色绿像片 | 在线黄av| 欧美日韩一区在线 | 在线观看久草 | 日韩爱爱网站 | 国产精品中文字幕一区二区三区 | 免费av一区二区三区 | 毛片免费在线观看 | 国产精品99久久久久久动医院 | 精品视频国产 | 亚洲成人精品在线观看 | 精品视频一区二区三区在线观看 | 99伊人网| 亚洲区视频 | 伊人天堂网 | 成人福利在线 | 超碰精品在线 | 围产精品久久久久久久 | 久久久久久国产精品免费免费 | 日韩激情视频一区 | av一区在线观看 |