測試一.png (481.35 KB, 下載次數: 110)
下載附件
1
2017-5-9 13:46 上傳
電路.png (37.8 KB, 下載次數: 71)
下載附件
2
2017-5-9 13:46 上傳
分析.png (34.23 KB, 下載次數: 56)
下載附件
3
2017-5-9 13:46 上傳
測試二.png (884.54 KB, 下載次數: 75)
下載附件
4
2017-5-9 13:47 上傳
MAIN.C
- #include<reg52.h>
- #include<Ruler.h>//調用卡尺驅動程序
- unsigned char Styles;//模式(0:mm 1:inch)
- unsigned char Sign;//正負號(0:正 1:負)
- sfr AUXR = 0x8E; //輔助寄存器
- void Init_Com()//串口初始化 9600/n/8/1 MCU:STC12C2052
- {
- AUXR = AUXR|0x40; // T1, 1T Mode
- TMOD = 0x20;
- SCON = 0x50;
- TH1 = 0xDC;
- TL1 = TH1;
- PCON = 0x00;
- TR1 = 1;
- }
- void SendOneByte(unsigned char c)
- {
- SBUF = c;
- while(!TI);
- TI = 0;
- }
- void main() //主函數
- {
- unsigned int Tem1;
- Init_Com();
- while(!CP); //等待拉高
- while(1)
- {
- Tem1=Read();//讀出卡尺數據
- SendOneByte(Styles);//模式 0:mm 1:inch
- SendOneByte(Sign);//正負號 0:正 1負
- SendOneByte(Tem1>>8);//有效讀數高字節
- SendOneByte(Tem1);//有效讀數低字節
- /*數據發送速度取決于卡尺數據輸出速度*/
- }
- }
- Ruler.H
- #include<reg52.h>
- //卡尺接口
- sbit Data = P1^7;//數據
- sbit CP = P1^6;//時鐘
- extern unsigned char Styles;//模式(0:mm 1:inch)
- extern unsigned char Sign;//正負號(0:正 1:負)
- unsigned char PR_DATA(unsigned char Data_Temp)//高低位交換
- {
- unsigned char DATA;
- DATA=((Data_Temp&0x01)<<7|(Data_Temp&0x02)<<5|(Data_Temp&0x04)<<3|(Data_Temp&0x08)<<1
- |(Data_Temp&0x10)>>1|(Data_Temp&0x20)>>3|(Data_Temp&0x40)>>5|(Data_Temp&0x80)>>7);
- return DATA;
- }
- unsigned int Read()//讀出數據 應用: ReadData=Read();
- {
- unsigned int Dat,p=24,Temp,mm,inch;
- unsigned char SignBit,Hbit,Lbit;
- while(p--)//開始讀數據
- {
- while(CP);
- while(!CP);//等待時鐘拉高
- Dat=(Dat<<1)|Data;
- switch (p)
- {
- case 16: Lbit=PR_DATA(Dat);break;
- case 8: Hbit=PR_DATA(Dat);break;
- case 0: SignBit=PR_DATA(Dat);break;
- default:break;
- }
- }
- Temp=(Hbit<<8)+Lbit;
- if((SignBit==0x00)||(SignBit==0x80))Sign=0; //正數標志
- if((SignBit==0x10)||(SignBit==0x90))Sign=1; //負數標志
- if((SignBit==0x00)||(SignBit==0x10))Styles=0; //mm模式
- if((SignBit==0x80)||(SignBit==0x90))Styles=1;; //inch模式
- if(Styles==0)//模式判斷
- {
- mm=Temp;
- return mm; //mm模式
- }
- else
- {
- inch=Temp/2; //inch模式
- return inch;
- }
- }
復制代碼
|