欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GP2Y10單片機驅(qū)動程序和資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:196363 發(fā)表于 2017-5-4 09:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
gp2y10的驅(qū)動程序
晶振:12.000MHz

傳感器接口:
1、6引腳接+5V電源
2、4引腳接GND
3引腳接PWM信號——T0CLKO=P3.4或PWM00=P2.0
5引腳接AD引腳——單片機的P1.0引腳
顯示接口:
J3接LCD1602
參考文獻:
《集體智慧編程》
《機器學(xué)習(xí)實戰(zhàn)》

單片機源程序:
  1. /********************************************************************************
  2. *  描述:                LCD1602 滾動顯示                                       *
  3. * 顯示方式:                                                                   *
  4. * 1、從左到右逐字顯示,閃動二次,清屏。                                        *
  5. * 2、再從右到左逐字顯示,閃動二次,清屏。                                      *
  6. * 3、周期性地重復(fù)上述顯示方式。                                                *                           
  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位復(fù)位時為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;  //復(fù)位端            
  60. sbit LCD_RW = P2^5;         //寫數(shù)據(jù)端
  61. sbit LCD_EP = P2^7;         //使能端
  62. uchar display1[6];
  63. bit flag;
  64. uint addata;
  65. /****************延時函數(shù)************************/       
  66. delay(uint ms)
  67. {                    //延時子程序
  68.         uint i;
  69.         while(ms--)
  70.         {
  71.                 for(i = 0; i< 250; i++)
  72.                 {
  73.                         _nop_();          //空執(zhí)行
  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. /****************側(cè)忙函數(shù)************************/               
  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;//返回側(cè)忙結(jié)果
  105. }

  106. /****************寫命令函數(shù)************************/       
  107. lcd_wcmd(uchar cmd)
  108. {                          // 寫入指令數(shù)據(jù)到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_(); //用于產(chǎn)生一個脈沖寬度
  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. {                          //設(shè)定顯示位置
  130.         lcd_wcmd(pos | 0x80);
  131. }

  132. /****************寫數(shù)據(jù)函數(shù)************************/       
  133. lcd_wdat(uchar dat)
  134. {                   //寫入字符顯示數(shù)據(jù)到LCD
  135.         while(lcd_bz());
  136.         LCD_RS = 1;
  137.         LCD_RW = 0;
  138.         LCD_EP = 0;
  139.         P0 = dat;  //將8位數(shù)據(jù)通過P0口傳給1602
  140.         _nop_();
  141.         _nop_();   //用于產(chǎn)生一個脈沖寬度
  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初始化設(shè)定
  154.         lcd_wcmd(0x38);     //16*2顯示,5*7點陣,8位數(shù)據(jù)
  155.         delay(1);
  156.         lcd_wcmd(0x0c);     //顯示開,關(guān)光標
  157.         delay(1);
  158.         lcd_wcmd(0x06);     //移動光標
  159.         delay(1);
  160.         lcd_wcmd(0x01);     //清除LCD的顯示內(nèi)容
  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. /****************主函數(shù)****************************/
  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設(shè)置為1T模式
  212.         INT_CLKO=0x01;//使能定時器0時鐘輸出使能
  213.         TMOD=0x01;//設(shè)置定時器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);//設(shè)置顯示位置為第一行的第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的顯示內(nèi)容
  238.         while(1)
  239.         {
  240.                 //addata=GetADCResult(0);//8為AD轉(zhuǎn)換
  241.                 //addata=(addata<<2)+ADC_LOW2;//10位AD轉(zhuǎn)換
  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);//設(shè)置顯示位置為第一行的第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的顯示內(nèi)容
  257.         }
  258. }

  259. /**************************************************/
  260. /*********test T0 PWM*******
  261. main()
  262. {
  263.         //AUXR=0x80;//定時器0設(shè)置為1T模式
  264.         INT_CLKO=0x01;//使能定時器0時鐘輸出使能
  265.         TMOD=0x01;//設(shè)置定時器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.         //實測結(jié)果與程序相符
  292.         //Focs=12MHz,Fpca=(1/2)*Focs=6MHz,
  293.         //Fpwm=

  294. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

下載:
testGP2Y10.rar (169.42 KB, 下載次數(shù): 52)

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

使用道具 舉報

沙發(fā)
ID:229992 發(fā)表于 2017-9-11 20:30 | 只看該作者
謝謝大神
回復(fù)

使用道具 舉報

板凳
ID:432418 發(fā)表于 2018-11-24 17:02 | 只看該作者
求助 為什么我燒錄進去lcd顯示出來的是0946這四個數(shù)呢?
回復(fù)

使用道具 舉報

地板
ID:432418 發(fā)表于 2018-11-24 17:15 | 只看該作者
樓主 為什么我燒錄進單片機之后 lcd只顯示0946四個數(shù)字啊?
回復(fù)

使用道具 舉報

5#
ID:644316 發(fā)表于 2019-11-19 08:59 | 只看該作者
求完整源碼
回復(fù)

使用道具 舉報

6#
ID:472431 發(fā)表于 2019-12-19 23:40 | 只看該作者
布吉島 發(fā)表于 2018-11-24 17:15
樓主 為什么我燒錄進單片機之后 lcd只顯示0946四個數(shù)字啊?

解決了嗎?可以的話請您發(fā)到491222058@qq.com
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表