|
| 樓樓的代碼運行不了 |
| 我是萌新 |
|
#include <reg51.h> #include <main.h> #include <ad.h> #include <intrins.h> #include <stdio.h> sbit LED1=P1^6; //測試燈 #define AddWr 0x90 //寫數據地址 #define AddRd 0x91 //讀數據地址 extern bit ack; unsigned char ReadADC(unsigned char Chl); bit WriteDAC(unsigned char dat); u8 SEG[4]; u8 test_flag=0; code u8 display_duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; //定義段碼 code u8 display_wei[4]={0x70,0xB0,0xC0,0xE0}; //定義位碼 //1ms定時中斷 void Time1_Init() { TMOD = 0X10; TH1 = 0XFC; TL1 = 0X18; TR1 = 1; ET1 = 1; EA = 1; } //純延時 void Delay_ms(u16 i) { u8 j; for(;i >0;i--) { for(j=0;j < 110;j++); } } //數碼管顯示 void Shu_dispaly(u8 wei,u8 duan) { P2=display_wei[wei]; P0=display_duan[duan]; if(wei==3) { P0=P0|0x80; } } void main() { u8 num,i; float Voltage_temp; //定義浮點變量 u16 Voltage; Time1_Init(); LED1=0; Delay_ms(20); while(1) { if(test_flag)//1S讀取一次 { test_flag=0; for(i=0;i<5;i++) //連續讀5次,取最后一次,以便讀取穩定值 num=ReadADC(0); //讀取第1路電壓值,范圍是0-255 Voltage_temp=(float)num*5/256; //根據參考電源VREF算出時間電壓,float是強制轉換符號,用于將結果轉換成浮點型 Voltage=Voltage_temp*1000; } SEG[0]=Voltage%10; //個位 SEG[1]=Voltage/10%10;//十位 SEG[2]=Voltage/100%10;//百位 SEG[3]=Voltage/1000%10;//千位 for(i=0;i<4;i++) { Shu_dispaly(i,SEG[i]); Delay_ms(10); } } } //中斷入口:1S void interrupt_time_1() interrupt 3 { static u16 Counter=0; TH1 = 0XFC; TL1 = 0X18; Counter++; if(Counter==1000) { LED1=~LED1; Counter=0; if(test_flag==0) { test_flag=1; } } } //ADC值讀取 unsigned char ReadADC(unsigned char Chl) { unsigned char Val; Start_I2c(); //啟動總線 SendByte(AddWr); //發送器件地址 if(ack==0)return(0); SendByte(0x40|Chl); //發送器件子地址 if(ack==0)return(0); Start_I2c(); SendByte(AddWr+1); //1001 0001 是讀命令 if(ack==0)return(0); Val=RcvByte(); NoAck_I2c(); //發送非應位 Stop_I2c(); //結束總線 return(Val); } |