找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3789|回复: 1
收起左侧

单片机光照强度检测程序

[复制链接]
ID:662420 发表于 2019-12-12 14:41 | 显示全部楼层 |阅读模式
不同光照强度下,数码管的数字随之变换

单片机源程序如下:

  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转换的标志位
  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();//读数据
  89.         IIC_Ack(1);//发送应答
  90.         IIC_Stop();
  91.         return temp;
  92. }
  93. void dac_pcf8591(unsigned char date)
  94. {
  95.         IIC_Start();//起始信号
  96.   IIC_SendByte(0X90);//发送pcf8591写地址
  97.         IIC_WaitAck();//等待应答
  98.         IIC_SendByte(0X40);//选择D/A转换
  99.         IIC_WaitAck();
  100.         IIC_SendByte(date);//选择D/A转换
  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. }
复制代码

所有资料51hei提供下载:
光照强度检测.zip (34.37 KB, 下载次数: 45)
回复

使用道具 举报

ID:677478 发表于 2020-1-8 08:45 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表