光敏强度来控制路灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
源代码如下:
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //共阳极/*0,1,2,3,4,5,6,7,8,9,A,b,C,*/
- uchar code SEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6};
- //显示缓冲
- uchar num[]={0,0,0,0,0,0};
- //位码定义
- sbit q2=P2^1;
- sbit q1=P2^0;
- //按键
- sbit key1=P2^3;
- //灯
- sbit led0=P3^6;
- sbit led1=P3^7;
- sbit led2=P1^0;
- sbit led3=P1^1;
- sbit led4=P1^2;
- sbit led5=P1^3;
- sbit led6=P1^4;
- sbit led7=P1^5;
- sbit led8=P1^6;
- sbit led9=P1^7;
- uchar pep=0;
- sbit Clk= P2^4;
- sbit DATI=P2^6;
- sbit DATO= P2^6;
- sbit CS= P2^5;
- uint dat = 0x00; //AD值
- //AD转换子程序
- uint adc0832(unsigned char CH)
- {
- uchar i,test,adval;
- adval = 0x00;
- test = 0x00;
- //初始化
- Clk = 0;
- DATI = 1;
- _nop_(); _nop_();
- CS = 0;
- _nop_();
- Clk = 1;
- _nop_(); _nop_();
- //通道选择
- if(CH == 0x00)
- {
- Clk = 0;
- DATI = 1; //通道0的第一位
- _nop_();
- Clk = 1;
- _nop_(); _nop_();
- Clk = 0;
- DATI = 0; //通道0的第二位
- _nop_(); _nop_();
- Clk = 1;
- _nop_();
- }
- else
- {
- Clk = 0;
- DATI = 1; //通道1的第一位
- _nop_(); _nop_();
- Clk = 1;
- _nop_(); _nop_();
- Clk = 0;
- DATI = 1; //通道1的第二位
- _nop_();
- Clk = 1;
- _nop_();
- }
- Clk = 0; _nop_();
- DATI = 1;
- for( i = 0;i < 8;i++ ) //读取前8位的值
- {
- _nop_();
- adval <<= 1;
- Clk = 1;
- _nop_(); _nop_();
- Clk = 0; _nop_();
- if (DATO)
- adval |= 0x01;
- else
- adval |= 0x00;
- }
- for (i = 0; i < 8; i++) //读取后8位的值
- {
- test >>= 1;
- if (DATO)
- test |= 0x80;
- else
- test |= 0x00;
- _nop_();
- Clk = 1;
- _nop_(); _nop_();
- Clk = 0; _nop_();
- }
- 限于篇幅请下载附件,附件可直接仿真
复制代码
全部资料51hei下载地址:
光敏强度控制路灯.zip
(67.8 KB, 下载次数: 173)
|