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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

12c5a60s2單片機+GP2Y1010AU+1602液晶顯示例程 帶粉塵傳感器模塊pdf資料

  [復制鏈接]
跳轉到指定樓層
樓主
GP2Y1010AU模塊的引腳圖:


晶振:12.000MHz
傳感器接口:
1、6引腳接+5V電源
2、4引腳接GND
3引腳接PWM信號——T0CLKO=P3.4或PWM00=P2.0
5引腳接AD引腳——單片機的P1.0引腳
顯示接口:
J3接LCD1602


所有資料打包下載:
GP2Y10傳感器程序和pdf資料.rar (167.7 KB, 下載次數: 114)


12c5a60s2單片機源程序:
  1. /********************************************************************************
  2. *  描述:                LCD1602 滾動顯示                                       *
  3. * 顯示方式:                                                                   *
  4. * 1、從左到右逐字顯示,閃動二次,清屏。                                        *
  5. * 2、再從右到左逐字顯示,閃動二次,清屏。                                      *
  6. * 3、周期性地重復上述顯示方式。                                                *                           
  7. ********************************************************************************/
  8. #include <reg51.h>        //51寄存器文件
  9. #include <intrins.h>
  10. /**********Define Variable**********/
  11. #define ulong unsigned long
  12. #define uint  unsigned int
  13. #define uchar unsigned char
  14. #define bool  bit        
  15. /***Define ADC operation const for ADC_CONTR***/
  16. #define ADC_POWER   0x80
  17. #define ADC_FLAG    0x10
  18. #define ADC_START   0x08
  19. #define ADC_SPEEDLL 0x00
  20. #define ADC_SPEEDL  0x20
  21. #define ADC_SPEEDH  0x40
  22. #define ADC_SPEEDHH 0x60
  23. //ADRJ位復位時為0,此時AD值格式:
  24. //取10位時,(ADC_RES[7:0],ADC_RES[1:0])=1024*Vin/Vcc
  25. //取8位時,(ADC_RES[7:0])=256*Vin/Vcc
  26. //ADRJ為1,此時AD值格式:
  27. //取10位時,(ADC_RES[1:0],ADC_RES[7:0])=1024*Vin/Vcc

  28. /*******Declare SFR associated with the ADC****/
  29. sfr ADC_CONTR=0xBC;
  30. sfr ADC_RES=0xBD;
  31. sfr ADC_LOW2=0xBE;
  32. sfr P1ASF=0x9D;
  33. /*****Declare SFR associated with  the P1******/
  34. sfr P1M1=0x91;
  35. sfr P1M0=0x92;
  36. /***Declare SFR associated with  the Timer****/
  37. sfr  AUXR=0x8E;
  38. sfr  INT_CLKO=0x8F;
  39. sbit T0CLKO=P3^4;
  40. sbit PWM00=P2^0;
  41. /*****Declare SFR associated with  the PCA*****/
  42. sfr  CCON=0xD8;
  43. sbit CCF0=CCON^0;
  44. sbit CCF1=CCON^1;
  45. sbit CR=CCON^6;
  46. sbit CF=CCON^7;
  47. sfr  CMOD=0xD9;
  48. sfr  CL=0xE9;
  49. sfr  CH=0xF9;
  50. sfr  CCAPM0=0xDA;
  51. sfr  CCAP0L=0xEA;
  52. sfr  CCAP0H=0xFA;
  53. sfr  CCAPM1=0xDB;
  54. sfr  CCAP1L=0xEB;
  55. sfr  CCAP1H=0xFB;
  56. sfr  PCAPWM0=0xF2;
  57. sfr  PCAPWM1=0xF3;
  58. /****1602 LCD****************/
  59. sbit LCD_RS = P2^6;  //復位端            
  60. sbit LCD_RW = P2^5;         //寫數據端
  61. sbit LCD_EP = P2^7;         //使能端
  62. uchar display1[6];
  63. bit flag;
  64. uint addata;
  65. /****************延時函數************************/        
  66. delay(uint ms)
  67. {                    //延時子程序
  68.         uint i;
  69.         while(ms--)
  70.         {
  71.                 for(i = 0; i< 250; i++)
  72.                 {
  73.                         _nop_();          //空執行
  74.                         _nop_();
  75.                         _nop_();
  76.                         _nop_();
  77.                 }
  78.         }
  79. }
  80. /************************************************/
  81. void Delay880us()                //@12.000MHz
  82. {
  83.         unsigned char i, j;

  84.         i = 11;
  85.         j = 66;
  86.         do
  87.         {
  88.                 while (--j);
  89.         } while (--i);
  90. }
  91. /****************側忙函數************************/               
  92. bool lcd_bz()
  93. {                        
  94.         bool result;
  95.         LCD_RS = 0;
  96.         LCD_RW = 1;
  97.         LCD_EP = 1;
  98.         _nop_();
  99.         _nop_();
  100.         _nop_();
  101.         _nop_();
  102.         result = (bool)(P0 & 0x80);         //檢測P0最高位是否為1
  103.         LCD_EP = 0;
  104.         return result;//返回側忙結果
  105. }

  106. /****************寫命令函數************************/        
  107. lcd_wcmd(uchar cmd)
  108. {                          // 寫入指令數據到LCD
  109.         while(lcd_bz());
  110.         LCD_RS = 0;
  111.         LCD_RW = 0;
  112.         LCD_EP = 0;
  113.         _nop_();
  114.         _nop_();
  115.         P0 = cmd; //將8位指令通過P0口傳給1602
  116.         _nop_();
  117.         _nop_(); //用于產生一個脈沖寬度
  118.         _nop_();
  119.         _nop_();
  120.         LCD_EP = 1;
  121.         _nop_();
  122.         _nop_();
  123.         _nop_();
  124.         _nop_();
  125.         LCD_EP = 0;  
  126. }
  127.         
  128. lcd_pos(uchar pos)
  129. {                          //設定顯示位置
  130.         lcd_wcmd(pos | 0x80);
  131. }

  132. /****************寫數據函數************************/        
  133. lcd_wdat(uchar dat)
  134. {                   //寫入字符顯示數據到LCD
  135.         while(lcd_bz());
  136.         LCD_RS = 1;
  137.         LCD_RW = 0;
  138.         LCD_EP = 0;
  139.         P0 = dat;  //將8位數據通過P0口傳給1602
  140.         _nop_();
  141.         _nop_();   //用于產生一個脈沖寬度
  142.         _nop_();
  143.         _nop_();
  144.         LCD_EP = 1;
  145.         _nop_();
  146.         _nop_();
  147.         _nop_();
  148.         _nop_();
  149.         LCD_EP = 0;
  150. }
  151. /****************LCD 初始化************************/        
  152. lcd_init()
  153. {                   //LCD初始化設定
  154.         lcd_wcmd(0x38);     //16*2顯示,5*7點陣,8位數據
  155.         delay(1);
  156.         lcd_wcmd(0x0c);     //顯示開,關光標
  157.         delay(1);
  158.         lcd_wcmd(0x06);     //移動光標
  159.         delay(1);
  160.         lcd_wcmd(0x01);     //清除LCD的顯示內容
  161.         delay(1);
  162. }
  163. /*****************Initial ADC sfr***************/
  164. void InitADC()
  165. {
  166.         //P1ASF=0xff;//Open 8 channels ADC function
  167.         P1ASF=0x01;//Open P1.0 channels ADC function
  168.         ADC_RES=0;//Clear previous result
  169.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
  170.         delay(2);//ADC power-on and delay
  171. }
  172. /****************Get ADC result*****************/
  173. uchar GetADCResult(uchar ch)
  174. {
  175.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
  176.         _nop_();//Must wait before inqurity
  177.         _nop_();
  178.         _nop_();
  179.         _nop_();
  180.         while(!(ADC_CONTR&ADC_FLAG));//Wait complete flag
  181.         ADC_CONTR&=~ADC_FLAG;//Close ADC

  182.         return ADC_RES;
  183. }

  184. void tm0() interrupt 1 using 1
  185. {
  186.         flag=!flag;
  187.         if(flag)
  188.         {
  189.                 TL0=0xC0;
  190.                 TH0=0xFE;
  191.                 PWM00=1;
  192.         }
  193.         else
  194.         {
  195.                 TL0=0x30;
  196.                 TH0=0xDA;
  197.                 PWM00=0;
  198.                 Delay880us();
  199.                 addata=GetADCResult(0);
  200.         }
  201. }


  202. /****************主函數****************************/
  203. main()
  204. {
  205.         uchar i;
  206.         //uint addata;
  207.         P1M1=P1M1|0x01;
  208.         P1M0=P1M0|0x00;//P1.0為輸入口
  209.         lcd_init();// 初始化LCD
  210.         InitADC();//初始化ADC
  211.         //AUXR=0x80;//定時器0設置為1T模式
  212.         INT_CLKO=0x01;//使能定時器0時鐘輸出使能
  213.         TMOD=0x01;//設置定時器0為模式1(16位自動重裝載模式)
  214.         TL0=0x30;
  215.         TH0=0xDA;
  216.         T0CLKO=0;
  217.         flag=0;
  218.         TR0=1;
  219.         ET0=1;
  220.         EA=1;
  221.         delay(10);
  222.         addata=998;
  223.         display1[0]=addata/1000+0x30;
  224.         addata=addata%1000;
  225.         display1[1]=addata/100+0x30;
  226.         addata=addata%100;
  227.         display1[2]=addata/10+0x30;        
  228.         display1[3]=addata%10+0x30;
  229.         lcd_wcmd(0x06);//向右移動光標
  230.         lcd_pos(0);//設置顯示位置為第一行的第1個字符
  231.         for(i=0;i<4;i++)
  232.         {
  233.                 lcd_wdat(display1[i]);
  234.                 delay(30);//控制兩字之間顯示速度
  235.         }
  236.         delay(1500);//控制停留時間        
  237.         lcd_wcmd(0x01);//清除LCD的顯示內容
  238.         while(1)
  239.         {
  240.                 //addata=GetADCResult(0);//8為AD轉換
  241.                 //addata=(addata<<2)+ADC_LOW2;//10位AD轉換
  242.                 display1[0]=addata/1000+0x30;
  243.                 addata=addata%1000;
  244.                 display1[1]=addata/100+0x30;
  245.                 addata=addata%100;
  246.                 display1[2]=addata/10+0x30;        
  247.                 display1[3]=addata%10+0x30;
  248.                 lcd_wcmd(0x06);//向右移動光標
  249.                 lcd_pos(0);//設置顯示位置為第一行的第1個字符
  250.                 for(i=0;i<4;i++)
  251.                 {
  252.                         lcd_wdat(display1[i]);
  253.                         delay(30);//控制兩字之間顯示速度
  254.                 }
  255.                 delay(500);//控制停留時間        
  256.                 lcd_wcmd(0x01);//清除LCD的顯示內容
  257.         }
  258. }

  259. /**************************************************/
  260. /*********test T0 PWM*******
  261. main()
  262. {
  263.         //AUXR=0x80;//定時器0設置為1T模式
  264.         INT_CLKO=0x01;//使能定時器0時鐘輸出使能
  265.         TMOD=0x01;//設置定時器0為模式1(16位自動重裝載模式)
  266.         TL0=0x30;
  267.         TH0=0xDA;
  268.         T0CLKO=0;
  269.         flag=0;
  270.         TR0=1;
  271.         ET0=1;
  272.         EA=1;
  273.         while(1)
  274.         {
  275.                 ;
  276.         }
  277. }
  278. ***************************/
  279. /***********test PWM*************
  280. main()
  281. {
  282.         CCON=0;
  283.         CL=0;
  284.         CH=0;
  285.         CMOD=0x02;
  286.         
  287.         CCAP0H=0x80;
  288.         CCAP0L=0x80;
  289.         CCAPM0=0x42;
  290.         ***************************
  291.         //實測結果與程序相符
  292.         //Focs=12MHz,Fpca=(1/2)*Focs=6MHz,
  293.         //Fpwm=(1/256)*Fpca=23.4375KHz,
  294.         //Tpwm=1/(23.4375KHz)=42.6667us
  295.         //占空比50%.
  296.         ***************************

  297.         CCAP1H=0xFF;
  298.         CCAP1L=0xFF;
  299.         PCAPWM1-0x03;
  300.         CCAPM1=0x42;

  301.         CR=1;
  302.         while(1)
  303.         {
  304.                 ;
  305.         }
  306. }
  307. *******************************/
復制代碼


評分

參與人數 2黑幣 +13 收起 理由
770860889 + 5 絕世好帖!
ssfc + 8

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-1-10 00:19 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:170423 發表于 2017-3-16 20:59 | 只看該作者
厲害了大兄弟
回復

使用道具 舉報

地板
ID:139277 發表于 2017-4-11 10:39 | 只看該作者
這程序看的笑死我了,敢不敢再胡扯一點搞笑一點
回復

使用道具 舉報

5#
ID:440932 發表于 2018-12-8 16:10 | 只看該作者
很好 很喜歡
回復

使用道具 舉報

6#
ID:370485 發表于 2019-2-27 15:26 | 只看該作者
好東西,收藏了
回復

使用道具 舉報

7#
ID:419603 發表于 2019-7-12 22:33 來自觸屏版 | 只看該作者
太棒了
回復

使用道具 舉報

8#
ID:547587 發表于 2020-3-17 21:59 | 只看該作者
請問有GP2Y1010AU0F傳感器的程序流程圖嗎
回復

使用道具 舉報

9#
ID:547587 發表于 2020-3-17 22:00 | 只看該作者
有提供粉塵傳感器的程序流程嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲高清av | 一级黄色影片在线观看 | 欧美自拍视频 | 中文字幕免费 | 国产福利在线播放 | 夜夜爽99久久国产综合精品女不卡 | 男人天堂久久 | 91影院| 免费激情 | 久久免费香蕉视频 | 久久精品国产免费高清 | 毛片久久久| 夜夜艹 | 精品国产黄色片 | 视频一区在线 | 久草在线高清 | 在线观看国产视频 | 日韩精品一区二区三区中文在线 | 午夜精品在线 | 精品久久香蕉国产线看观看亚洲 | 亚洲三区在线播放 | 中文字幕一区二区三区四区 | 干干干操操操 | 国产精品视频观看 | 伊人网综合在线观看 | 欧美日韩久久精品 | 久久久免费 | 北条麻妃国产九九九精品小说 | 久久精品一区二区 | 亚洲精品一区二区三区蜜桃久 | 在线免费观看黄色网址 | 久久久久成人精品免费播放动漫 | av在线黄| 免费久久精品视频 | 黄色网页在线 | 国产电影一区二区在线观看 | 干干干操操操 | 黄网站免费在线 | 日本不卡一区二区三区在线观看 | 精品综合 | 久久成人高清视频 |