|
1.jpg.png (257.89 KB, 下載次數: 44)
下載附件
2020-4-4 14:58 上傳
#include <REG51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//******************adc0832****************************//
sbit CLK= P2^2;//時鐘,初始狀態為0
sbit DI= P2^3;//數據輸入
sbit DO= P2^1; // 數據輸出
sbit CS= P2^0;
//******************按鈕****************************//
sbit start =P2^4;
sbit end=P2^5;
sbit led=P3^5;
sbit down = P3^0;
sbit up = P3^1;
uchar start_flag;//開始標志
//延時
void delay(uchar i)
{
while(i--)
{
if(!end) //end按鈕按下
start_flag=0;
}
}
/*******************亮燈函數***************/
void led_red(uchar i)//占空比i/13
{
led=0;
delay(i/10);
if(i/10<12)
{
led=1;
delay(12-i/10);
}
}
/*********************************************
讀取ADC
**********************************************/
uchar ADC()//通道ch0
{
uchar temp0,temp1,i;
CS=0;
temp0=0;
temp1=0;
_nop_();
_nop_();
DI=1;//開始位
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
//選擇通道0
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1個下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3個上升沿DI=0
_nop_();
DI=1;
//********通道選擇結束開始讀取轉換后的二進制數****
//下降沿讀數,一下進行判斷和處理,共8次
for(i=0;i<8;i++)
{
temp0=temp0<<1;
CLK=1;
if(DO)
temp0++;
_nop_();
CLK=0;
}
for(i=0;i<8;i++)
{
temp1=temp1>>1;
CLK=1;
if(DO)
temp1=temp1 +0x80;
_nop_();
CLK=0;
}
CS=1;
return temp0;
}
//*********************************************
void main()
{
uchar num,i,t;
CLK=0;//ADC時鐘初始化
start_flag=0;
while(1)
{
//按鍵檢測
if(!start) //start按鈕按下
{
start_flag=1;
}
if(!end) //end按鈕按下
{
start_flag=0;
}
if(start_flag)
{
if(!up)
{
if(t<i)
{
t++;
}
delay(100);
}
if(!down)
{
if(t>0)
{
t--;
}
delay(100);
}
num=ADC();
P1=num;
for(i=0;i<100;i++)
led_red(num);
}
}
}
|
-
-
pwm調光.zip
2020-4-4 15:04 上傳
點擊文件名下載附件
46.75 KB, 下載次數: 7
|