http://v.youku.com/v_show/id_XMTQ1OTA2ODY4NA==.html?from=y1.7-1.2
http://v.youku.com/v_show/id_XMTQ1OTI2MzM3Ng==.html?from=y1.7-1.2
視頻怎么總是顯示失敗啊!不會弄了
20160126_182415.jpg (3.2 MB, 下載次數: 151)
下載附件
2016-1-28 13:07 上傳
雕刻機刻的線路
20160128_122127.jpg (2.58 MB, 下載次數: 147)
下載附件
雕刻機刻的不好焊接,容易短路
2016-1-28 13:07 上傳
雕刻機刻的線路真心不好焊接啊、容易短路。
20160128_124213.jpg (2.39 MB, 下載次數: 146)
下載附件
2016-1-28 13:07 上傳
代碼:
#include <intrins.h> //頭文件
#include "STC12C5A60S2.H" //STC自己的頭文件,
#define uchar unsigned char //兩個宏定義
#define uint unsigned int
sbit ledL15=P1^2;sbit ledL14=P1^3;sbit ledL13=P1^4; //定義左聲道15個LED所接的IO口
sbit ledL12=P1^5;sbit ledL11=P1^6;sbit ledL10=P1^7;
sbit ledL9=P3^0;sbit ledL8=P3^1;sbit ledL7=P3^2;
sbit ledL6=P3^3;sbit ledL5=P3^4;sbit ledL4=P3^5;
sbit ledL3=P3^6;sbit ledL2=P3^7;sbit ledL1=P2^0;
sbit ledR15=P0^0;sbit ledR14=P0^1;sbit ledR13=P0^2; //定義右聲道15個LED所接的IO口
sbit ledR12=P0^3;sbit ledR11=P0^4;sbit ledR10=P0^5;
sbit ledR9=P0^6;sbit ledR8=P0^7;sbit ledR7=P2^7;
sbit ledR6=P2^6;sbit ledR5=P2^5;sbit ledR4=P2^4;
sbit ledR3=P2^3;sbit ledR2=P2^2;sbit ledR1=P2^1;
uint ADC_resultL,ADC_resultR,voL,voR; //定義幾個unsigned int型和unsigned char型變量
uchar numL,numR,tt0,tt1,ttL,ttR,biaozhiL,biaozhiR,xuantingL,xuantingR,xialuoL,xialuoR,pfL,pfR;
void delay(uchar z) //延時程序
{
uchar x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void displayL() //左聲道顯示程序
{
if(pfL==1)
ledL1=0;
else
{
if(numL>=1)ledL1=0; else ledL1=1;
}
if(pfL==2)
ledL2=0;
else
{
if(numL>=2)ledL2=0; else ledL2=1;
}
if(pfL==3)
ledL3=0;
else
{
if(numL>=3)ledL3=0; else ledL3=1;
}
if(pfL==4)
ledL4=0;
else
{
if(numL>=4)ledL4=0; else ledL4=1;
}
if(pfL==5)
ledL5=0;
else
{
if(numL>=5)ledL5=0; else ledL5=1;
}
if(pfL==6)
ledL6=0;
else
{
if(numL>=6)ledL6=0; else ledL6=1;
}
if(pfL==7)
ledL7=0;
else
{
if(numL>=7)ledL7=0; else ledL7=1;
}
if(pfL==8)
ledL8=0;
else
{
if(numL>=8)ledL8=0; else ledL8=1;
}
if(pfL==9)
ledL9=0;
else
{
if(numL>=9)ledL9=0; else ledL9=1;
}
if(pfL==10)
ledL10=0;
else
{
if(numL>=10)ledL10=0; else ledL10=1;
}
if(pfL==11)
ledL11=0;
else
{
if(numL>=11)ledL11=0; else ledL11=1;
}
if(pfL==12)
ledL12=0;
else
{
if(numL>=12)ledL12=0; else ledL12=1;
}
if(pfL==13)
ledL13=0;
else
{
if(numL>=13)ledL13=0; else ledL13=1;
}
if(pfL==14)
ledL14=0;
else
{
if(numL>=14)ledL14=0; else ledL14=1;
}
if(pfL==15)
ledL15=0;
else
{
if(numL>=15)ledL15=0; else ledL15=1;
}
}
void displayR() //右聲道顯示程序
{
if(pfR==1)
ledR1=0;
else
{
if(numR>=1)ledR1=0; else ledR1=1;
}
if(pfR==2)
ledR2=0;
else
{
if(numR>=2)ledR2=0; else ledR2=1;
}
if(pfR==3)
ledR3=0;
else
{
if(numR>=3)ledR3=0; else ledR3=1;
}
if(pfR==4)
ledR4=0;
else
{
if(numR>=4)ledR4=0; else ledR4=1;
}
if(pfR==5)
ledR5=0;
else
{
if(numR>=5)ledR5=0; else ledR5=1;
}
if(pfR==6)
ledR6=0;
else
{
if(numR>=6)ledR6=0; else ledR6=1;
}
if(pfR==7)
ledR7=0;
else
{
if(numR>=7)ledR7=0; else ledR7=1;
}
if(pfR==8)
ledR8=0;
else
{
if(numR>=8)ledR8=0; else ledR8=1;
}
if(pfR==9)
ledR9=0;
else
{
if(numR>=9)ledR9=0; else ledR9=1;
}
if(pfR==10)
ledR10=0;
else
{
if(numR>=10)ledR10=0; else ledR10=1;
}
if(pfR==11)
ledR11=0;
else
{
if(numR>=11)ledR11=0; else ledR11=1;
}
if(pfR==12)
ledR12=0;
else
{
if(numR>=12)ledR12=0; else ledR12=1;
}
if(pfR==13)
ledR13=0;
else
{
if(numR>=13)ledR13=0; else ledR13=1;
}
if(pfR==14)
ledR14=0;
else
{
if(numR>=14)ledR14=0; else ledR14=1;
}
if(pfR==15)
ledR15=0;
else
{
if(numR>=15)ledR15=0; else ledR15=1;
}
}
void init() //初始化程序
{
TMOD=0x11; //設定定時器0、1工作方式
EA=1; //開總中斷
TH0=0xb1; //高8位裝初值 TH0=(65536-20000)/256;
TL0=0xe0; //低8位裝初值 TL0=(65536-20000)%256;
ET0=1; //開定時器0
TR0=1; //啟動定時器0
TH1=0xd8; //高8位裝初值TH1=(65536-10000)/256
TL1=0xf0; //低8位裝初值TL1=(65536-10000)%256
ET1=1; //開定時器1
TR1=1; //啟動定時器1
}
//---------------------------------------------------------------------
//以下選擇 ADC 轉換速率,只能選擇其中一種
// SPEED1 SPEED0 A/D轉換所需時間
#define AD_SPEED 0x60 // 0110,0000 1 1 70 個時鐘周期轉換一次,
// CPU工作頻率21MHz時 A/D轉換速度約 300KHz
//#define AD_SPEED 0x40 //0100,0000 1 0 140 個時鐘周期轉換一次
//#define AD_SPEED 0x20 //0010,0000 0 1 280 個時鐘周期轉換一次
//#define AD_SPEED 0x00 //0000,0000 0 0 420 個時鐘周期轉換一次
//---------------------------------------------------------------------
/*---------------------------------------------------------------------
STC12C5A60S2單片機AD轉換函數,直接引用于宏晶科技網站
----------------------------------------------------------------------*/
uint ad_zhuanhuan(uchar channel)
{
uchar AD_finished=0; //存儲 A/D 轉換標志
ADC_RES = 0; //高八位清零
ADC_RESL = 0; //低兩位清零
channel &= 0x07; //0000,0111 清0高5位
ADC_CONTR = AD_SPEED;
_nop_();
ADC_CONTR |= channel; //選擇 A/D 當前通道
_nop_();
ADC_CONTR |= 0x80; //啟動 A/D 電源
delay(1); //使輸入電壓達到穩定
ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 啟動A/D轉換,
AD_finished = 0;
while (AD_finished ==0 ) //等待A/D轉換結束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 測試A/D轉換結束否
}
ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 關閉A/D轉換,
return (ADC_RES*256+ADC_RESL); //返回 A/D 高 8 位轉換結果
}
void main() //主程序
{
P4SW=0x70; //0x70=0111 0000 ,將P4.4 P4.5 P4.6設置成IO口
init();
// ADRJ = AUXR1^2:
// 0: 10 位A/D 轉換結果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器
// 1: 10 位A/D 轉換結果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器
// AUXR1 &= ~0x04; //0000,0100, 令 ADRJ=0
AUXR1 |= 0x04; //0000,0100, 令 ADRJ=1
ADC_CONTR |= 0x80; //1000,0000 打開 A/D 轉換電源,啟動AD轉換
P1ASF = 0x03; //0000,0011, 將 P1.0 P1.1 置成模擬口
while(1)
{
voL= ADC_resultL*5.0; //左聲道電平轉換結果。語句中5.0=5*1.0其中*1.0是必不可少
//的,不然C語言作整數處理,沒有想要的結果產生.
if(voL>2000) numL=14;
else if(voL>1635) numL=13;
else if(voL>1432) numL=12;
else if(voL>1270) numL=11;
else if(voL>1130) numL=10;
else if(voL>1006) numL=9;
else if(voL>895) numL=8;
else if(voL>797) numL=7;
else if(voL>709) numL=6;
else if(voL>650) numL=5;
else if(voL>400) numL=4;
else if(voL>262) numL=3;
else if(voL>159) numL=2;
else if(voL>70) numL=1;
else numL=0;
if(pfL<=numL) //檢測如果漂浮物不高于峰值就讓漂浮物置于峰值上面,同時 標志位 置0
{
pfL=numL+1;
biaozhiL=0; //標志位 置0
xuantingL=10; //變量xuantingL 改變此值可以設定左漂浮物懸停時間
}
else //if(pfL>numL) 如果漂浮物高于峰值就把標志位置1
{
biaozhiL=1; //標志位 置1
}
displayL(); //顯示左聲道具體電平值的段
voR= ADC_resultR*5.0; //左聲道電平轉換結果。原理同上邊左聲道
if(voR>2000) numR=14;
else if(voR>1635) numR=13;
else if(voR>1432) numR=12;
else if(voR>1270) numR=11;
else if(voR>1130) numR=10;
else if(voR>1006) numR=9;
else if(voR>895) numR=8;
else if(voR>797) numR=7;
else if(voR>709) numR=6;
else if(voR>650) numR=5;
else if(voR>400) numR=4;
else if(voR>262) numR=3;
else if(voR>159) numR=2;
else if(voR>70) numR=1;
else numR=0;
if(pfR<=numR)
{
pfR=numR+1;
biaozhiR=0;
xuantingR=10;
}
else
{
biaozhiR=1;
}
displayR(); //顯示右聲道具體電平值的段
}
}
void timer0() interrupt 1 //定時器0中斷程序
{
TH0=0xb1;
TL0=0xe0;
tt0++;
if (tt0>=1) //20ms轉換一次.
{
tt0=0;
ADC_resultL = ad_zhuanhuan(0); //P1.0 為 A/D 當前通道, 測量結果存ADC_result0
ADC_resultR = ad_zhuanhuan(1); //P1.1 為 A/D 當前通道, 測量結果存ADC_result7
}
}
void timer1() interrupt 3 //定時器1中斷程序
{
//再裝一次初值
TH1=0xd8;
TL1=0xf0;
tt1++;
if(tt1>=1)
{
if(biaozhiL)
{
ttL++;
if(ttL>7) //改變此值可以設定左漂浮物下降速度
{
if(xuantingL==0)
pfL--;
else if(xuantingL>0)
xuantingL--;
ttL=0;
}
}
if(biaozhiR)
{
ttR++;
if(ttR>7) //改變此值可以設定右漂浮物下降速度
{
if(xuantingR==0)
pfR--;
else if(xuantingR>0)
xuantingR--;
ttR=0;
}
}
tt1=0;
}
}
|