|
compiling 溫度.c...
溫度.c(80): warning C317: attempt to redefine macro 'ADC_CONTR'
溫度.c(81): error C301: identifier expected
溫度.c(81): error C304: bad macro parameter list
溫度.c - 2 Error(s), 1 Warning(s). 有出現(xiàn)這個(gè)問(wèn)題了
單片機(jī)源程序如下:- #include <REG51.H>
- #define TXD_Pin P3_1 //定義TXD引腳為P3.1
- #define BAUDRATE 9600 //定義波特率
- #define FREQ_OSC 11059200 //定義外部晶振頻率
- #define TH 40 //定義溫度閾值
- void send_data(unsigned char dat);
- void send_string(unsigned char *s);
- void init_uart();
- void init_adc();
- int get_adc_value();
- void delay(int time);
- void display_temp(int temp);
- void main()
- {
- unsigned int adc_val = 0;
- int temp = 0;
- init_uart(); //初始化串口
- init_adc(); //初始化ADC
- while(1)
- {
- adc_val = get_adc_value(); //讀取ADC值
- temp = (int)(adc_val / 2); //將ADC值轉(zhuǎn)換為溫度(假設(shè)為50mV/℃)
- if(temp >= TH) //如果溫度超過(guò)閾值,則LED閃爍
- {
- display_temp(temp);
- delay(500);
- }
- else //否則,LED顯示當(dāng)前溫度
- {
- display_temp(temp);
- }
- }
- }
- void init_uart()
- {
- //計(jì)算波特率預(yù)分頻器的值
- unsigned char SCON_value = 0x50; //定義串口控制寄存器的初始值
- unsigned int Baud_value = 0x10000 - (FREQ_OSC / (16 * BAUDRATE));
- //配置串口
- SCON = SCON_value;
- TMOD &= 0x0F;
- TMOD |= 0x20; //使用timer1作為波特率發(fā)生器,允許8位自動(dòng)重載
- TH1 = (unsigned char)(Baud_value / 256); //設(shè)置波特率預(yù)分頻器的高8位
- TL1 = (unsigned char)Baud_value; //設(shè)置波特率預(yù)分頻器的低8位
- TR1 = 1; //啟動(dòng)timer1
- }
- void send_data(unsigned char dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
- void send_string(unsigned char *s)
- {
- while(*s)
- {
- send_data(*s++);
- }
- }
- void init_adc()
- {
- EA = 1; //使能全局中斷
- #define ADC_CONTR = 0x80; //設(shè)置ADC時(shí)鐘源為系統(tǒng)時(shí)鐘、ADC啟動(dòng)、ADC自動(dòng)重載模式
- }
- int get_adc_value()
- {
- #define ADC_CONTR |= 0x08; //啟動(dòng)ADC轉(zhuǎn)換
- #define while(!(ADC_CONTR & 0x10)); //等待ADC轉(zhuǎn)換完成
- #define return ADC_RES * 256 + ADC_RESL; //返回ADC轉(zhuǎn)換結(jié)果
- }
- void delay(int time)
- {
- int i, j;
- for (i = time; i > 0; i--)
- {
- for (j = 10; j > 0; j--);
- }
- }
- void display_temp(int temp)
- {
- static unsigned char code digit_table[] = { //數(shù)碼管顯示表(0~9,A~F)
- 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
- 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
- int i;
- unsigned char dat[4] = {0, 0, 0, 0}; //定義一個(gè)數(shù)組,用于存放各個(gè)位的顯示值
- dat[0] = digit_table[temp % 10]; //個(gè)位
- dat[1] = digit_table[(temp / 10) % 10];//十位
- dat[2] = digit_table[(temp / 100) % 10];//百位
- dat[3] = digit_table[temp / 1000]; //千位
- //依次點(diǎn)亮每個(gè)數(shù)碼管,顯示溫度數(shù)值
- for(i = 0; i < 4; i++)
- {
- P2 = 1 << i;
- P0 = dat[ i]; delay(1); }}
復(fù)制代碼 |
|