AVR單片機(jī)PCF8591AD-DA實驗
//-----------------------------------------------------------
void key1() //模擬量輸出按鍵
{
static uchar i,j;
if(k1==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k1==0)
{
i=1;j=0;
output_val=output_val+10;
}
}
}
}
else
{
i=0;
j=0;
}
}
//---------------------------------------------------
void key2() //模擬量輸出通道選擇
{
static uchar i,j;
if(k2==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k2==0)
{
i=1;j=0;
channel++;
if(channel>3)channel=0;
}
}
}
}
else
{
i=0;
j=0;
}
}
//---------------------------------------
void key3()
{
static uchar i,j;
if(k3==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k3==0)
{
i=1;j=0;
mode=1; //輸入模式
}
}
}
}
else
{
i=0;
j=0;
}
}
void key3()
{
static uchar i,j;
if(k3==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k3==0)
{
i=1;j=0;
mode=1; //輸入模式
}
}
}
}
else
{
i=0;
j=0;
}
}
//---------------------------------
void key4()
{
static uchar i,j;
if(k4==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k4==0)
{
i=1;j=0;
mode=2; //輸出模式
}
}
}
}
else
{
i=0;
j=0;
}
}
//-----------------------------------------------------
void show_in()
{
displaychar(0,0,st1); // 第一行顯示輸入狀態(tài)字符串
displayonechar(14,1,channel+48); //通道號選擇
}
//--------------------------------------------------
void show_out()
{
displaychar(0,0,st2); //第一行顯示輸出狀態(tài)字符串
displayonechar(14,1, );
}
//---------------------------------------------------
void show_value(uchar k) //顯示數(shù)值
{
displayonechar(7,1,((k/100)+48));
displayonechar(8,1,((k%100/10)+48));
displayonechar(9,1,((k%10)+48));
}
void key4()
{
static uchar i,j;
if(k4==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(k4==0)
{
i=1;j=0;
mode=2; //輸出模式
}
}
}
}
else
{
i=0;
j=0;
}
}
//-----------------------------------------------------
void show_in()
{
displaychar(0,0,st1); // 第一行顯示輸入狀態(tài)字符串
displayonechar(14,1,channel+48); //通道號選擇
}
//--------------------------------------------------
void show_out()
{
displaychar(0,0,st2); //第一行顯示輸出狀態(tài)字符串
displayonechar(14,1, );
}
//---------------------------------------------------
void show_value(uchar k) //顯示數(shù)值
{
displayonechar(7,1,((k/100)+48));
displayonechar(8,1,((k%100/10)+48));
displayonechar(9,1,((k%10)+48));
}
//-----------------------------------
void main()
{
uchar temp; //顯示模擬量值
port_init();
init1602();
ADC_write(0);
delay(1000);
while(1)
{
if(mode==1)
{
temp=ADC_read(channel); //從通道channel讀取模擬量值給變量temp
delay(3);
show_in(); //顯示輸入狀態(tài)字符串
show_value(temp);
key2(); //模擬輸入通道按鍵
delay(3);
}
if(mode==2)
{
ADC_write(output_val); //模擬量輸出值
show_out(); //顯示模擬量輸出狀態(tài)字符串
show_value(output_val);
key1(); //模擬輸出值按鍵
delay(3);
}
void main()
{
uchar temp; //顯示模擬量值
port_init();
init1602();
ADC_write(0);
delay(1000);
while(1)
{
if(mode==1)
{
temp=ADC_read(channel); //從通道channel讀取模擬量值給變量temp
delay(3);
show_in(); //顯示輸入狀態(tài)字符串
show_value(temp);
key2(); //模擬輸入通道按鍵
delay(3);
}
if(mode==2)
{
ADC_write(output_val); //模擬量輸出值
show_out(); //顯示模擬量輸出狀態(tài)字符串
show_value(output_val);
key1(); //模擬輸出值按鍵
delay(3);
}
key3(); //輸入模式
key4(); //輸出模式
}
key4(); //輸出模式
}
}
評論