楼楼的代码运行不了 |
我是萌新 |
#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); } |