標題: 單片機光照強度檢測程序 [打印本頁]

作者: balalanen    時間: 2019-12-12 14:41
標題: 單片機光照強度檢測程序
不同光照強度下,數(shù)碼管的數(shù)字隨之變換

單片機源程序如下:

  1. #include <reg52.h>
  2. #include "iic.h"
  3. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  4. unsigned char dspbuf[]={10,10,10,10,10,10,10,10};
  5. unsigned char dspcom=0;
  6. unsigned char adc_pcf8591(void);
  7. bit adc_flag;//a-d轉(zhuǎn)換的標志位
  8. unsigned int ms,value;
  9. void display();
  10. void dac_pcf8591(unsigned char date);
  11. void cls_buzz()
  12. {
  13.         P0=0XFF;
  14.         P2=P2&0X1F|0XA0;
  15.         P2&=0X1F;
  16. }

  17. void cls_led()
  18. {
  19.         P0=0XFF;
  20.         P2=P2&0X1F|0X80;
  21.         P2&=0X1F;
  22. }

  23. void main(void)
  24. {
  25.         unsigned char value;
  26.         cls_buzz();
  27.         cls_led();
  28.         TMOD=0X01;//用T0做;若用T1做,要改成0x10,TH1,TL1,ET1,TR1
  29.         TH0=0XFC;
  30.         TL0=0X66;
  31.         EA=1;
  32.         ET0=1;
  33.         TR0=1;
  34.                 while(1)
  35.                 {
  36.                         if(adc_flag)
  37.                         {
  38.                                 adc_flag=0;
  39.                                 value=adc_pcf8591();
  40.                                 dac_pcf8591(value);
  41.                                 (value>=100)?(dspbuf[5]=value/100):(dspbuf[5]=10);//條件?滿足:不滿足
  42.                                 (value>=10)?(dspbuf[6]=value%100/10):(dspbuf[6]=10);//條件?滿足:不滿足
  43.                                 dspbuf[7]=value%10;
  44.       }
  45.     }
  46. }

  47. void int_t0() interrupt 1
  48. {
  49.         TH0=0xfc;
  50.         TL0=0x66;
  51.        
  52.         if(++ms==500)
  53.         {
  54.                 ms=0;
  55.                 adc_flag=1;
  56.   }
  57.         display();
  58. }  

  59. void display()
  60. {
  61.         P0=0XFF;//消除鬼影
  62.         P2=P2&0X1F|0XE0;
  63.         P2&=0X1F;
  64.        
  65.         P0=1<<dspcom;
  66.         P2=0X1F|0XC0;
  67.         P2&=0X1F;
  68.        
  69.         P0=tab[dspbuf[dspcom]];
  70.         P2=P2&0X1F|0XE0;
  71.         P2&=0X1F;
  72.        
  73.         if(++dspcom==8)
  74.                 dspcom=5;
  75. }

  76. unsigned char adc_pcf8591(void)
  77. {
  78.         unsigned char temp;//返回值變量
  79.         IIC_Start();
  80.   IIC_SendByte(0X90);
  81.         IIC_WaitAck();
  82.         IIC_SendByte(0X01);
  83.         IIC_WaitAck();
  84.        
  85.         IIC_Start();
  86.         IIC_SendByte(0X91);
  87.         IIC_WaitAck();
  88.         temp=IIC_RecByte();//讀數(shù)據(jù)
  89.         IIC_Ack(1);//發(fā)送應(yīng)答
  90.         IIC_Stop();
  91.         return temp;
  92. }
  93. void dac_pcf8591(unsigned char date)
  94. {
  95.         IIC_Start();//起始信號
  96.   IIC_SendByte(0X90);//發(fā)送pcf8591寫地址
  97.         IIC_WaitAck();//等待應(yīng)答
  98.         IIC_SendByte(0X40);//選擇D/A轉(zhuǎn)換
  99.         IIC_WaitAck();
  100.         IIC_SendByte(date);//選擇D/A轉(zhuǎn)換
  101.         IIC_WaitAck();
  102.         IIC_Stop();
  103. }
  104. void write_delay(unsigned char t)
  105. {
  106.         unsigned char i;
  107.         while(t--)
  108.         {       
  109.                 for(i=0;i<112;i++);
  110.         }
  111. }
復(fù)制代碼

所有資料51hei提供下載:
光照強度檢測.zip (34.37 KB, 下載次數(shù): 45)



作者: 悟飯Gohan    時間: 2020-1-8 08:45
謝謝樓主




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1