|
原來是用4位LED顯示的時(shí)鐘修改的熱敏電阻溫度計(jì)
修改成通電就顯示溫度計(jì) 4位LED顯示正常, 修改去除. ds1302.c和ds1302.h . 熱敏電阻溫度顯示帶有鬼影 把 原來的程序 和修改的程序 放上給大家看看是那里出問題 那位師博能 看 修改后的程序那里出問題的,修改上傳一下謝謝
原來的程序顯示.jpg (39.13 KB, 下載次數(shù): 65)
下載附件
2021-12-28 16:19 上傳
修改的程序顯示.jpg (301.54 KB, 下載次數(shù): 63)
下載附件
2021-12-28 16:19 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <math.h>
- #include "ADC.H"
- sbit LED1 = P3 ^ 7;//數(shù)碼管1
- sbit LED2 = P3 ^ 6;//數(shù)碼管2
- sbit LED3 = P3 ^ 5;//數(shù)碼管3
- sbit LED4 = P3 ^ 4;//數(shù)碼管4
- //為了編程方便定義的位變量
- sbit a0 = ACC ^ 0;
- sbit a1 = ACC ^ 1;
- sbit a2 = ACC ^ 2;
- sbit a3 = ACC ^ 3;
- sbit a4 = ACC ^ 4;
- sbit a5 = ACC ^ 5;
- sbit a6 = ACC ^ 6;
- sbit a7 = ACC ^ 7;
- sfr AUXR = 0x8E; //0000,0000 輔助寄存器
- sfr P3M1 = 0xB1;
- sfr P3M0 = 0xB2;
- bit flag,dot_Bell=1;//鬧鐘調(diào)時(shí)閃爍標(biāo)志位
- unsigned char id=1;
- unsigned char disbuff[4] ={0};
- unsigned char time=0;
- unsigned int temp[1];
- unsigned int temp_num = 0;
- unsigned char code LEDData1 [ ] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff }; //正0-9LED數(shù)值
- unsigned char code LEDData2 [ ] = { 0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED數(shù)值
- void Delayms(unsigned int di) //延時(shí)
- {
- unsigned int da,db;
- for(da=0;da<di;da++)
- for(db=0;db<10;db++);
- }
- void Display(void) //掃描方式led1~led4循環(huán)點(diǎn)亮
- {
- time++;
- if(time==1)
- {
- if(dot_Bell)
- {
- P2=LEDData1[disbuff[0]]&0x7f;// 0x7F點(diǎn)亮DP小數(shù)點(diǎn)
- LED1=0; LED4=1;
- }
- else
- {
- P2=LEDData1[disbuff[0]];
- LED1=0; LED4=1;
- }
- }
- if(time==2)
- {
- if(id>=3)
- {
- P2=(LEDData2[disbuff[1]])&0x7F;
- LED1=1; LED2=0;
- }
- else
- if(flag)
- {
- P2=(LEDData2[disbuff[1]])&0x7F;
- LED1=1; LED2=0;
- }
- else
- {
- P2=LEDData2[disbuff[1]];
- LED1=1; LED2=0;
- }
- }
- if(time==3)
- {
- if(id>=3)
- {
- P2=LEDData1[disbuff[2]]&0x7f;
- LED2=1; LED3=0;
- }
- else
- if(flag)
- {
- P2=LEDData1[disbuff[2]]&0x7f;
- LED2=1; LED3=0;
- }
- else
- {
- P2=LEDData1[disbuff[2]];
- LED2=1; LED3=0;
- }
- }
-
- if(time==4)
- {
- time=0;
- if(disbuff[3]==0)
- {
- P2=LEDData1[10];
- LED3=1; LED4=0;
- }
- else
- {
- P2=LEDData1[disbuff[3]];
- LED3=1; LED4=0;
- }
- }
- }
- /******************************************************************************/
- void Timer1Init(void) //20毫秒@12.000MHz
- {
- AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式
- TMOD &= 0x0F; //設(shè)置定時(shí)器模式
- TL1 = 0xE0; //設(shè)置定時(shí)初值
- TH1 = 0xB1; //設(shè)置定時(shí)初值
- TF1 = 0; //清除TF1標(biāo)志
- TR1 = 1; //定時(shí)器1開始計(jì)時(shí)
- }
- /******************************************************************************/
- void Timer1(void) interrupt 3 using 1
- {
- temp_num++;
- if(temp_num > 40)
- {
- temp_num = 0;
- }
-
- }
- void ADC_convert(void)
- {
- ET0 = 0;
- if(temp_num == 0)
- {
- GetADCResult(6,&temp[0]);
- temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
- temp_num = 1;
- }
-
- P2 = LEDData1[temp[0]/1000]; //千位
- LED4 = 0;
- Delayms(50);
- LED4 = 1;
- P2 = (LEDData1[temp[0]%1000/100])&0x7F;//百位
- LED3 = 0;
- Delayms(50);
- LED3 = 1;
- P2 = LEDData2[temp[0]%1000%100/10];//十位
- LED2 = 0;
- Delayms(50);
- LED2 = 1;
- P2 = 0xa7;//c
- LED1 = 0;
- Delayms(50);
- LED1 = 1;
- ET1 = 1;//啟動定時(shí)器1
- }
- /******************************************************************************/
- void main(void)//主函數(shù)
- {
- P3M1=0x00;
- P3M0=0x08;
- InitADC(); //初始化ADC
- Timer1Init();
- EA=1;
- while(1)//主循環(huán)
- {
- Display();
- switch( id )
- {
- case 1:ADC_convert();break;//顯示溫度
- default:break;
- }
- }//while
- }//main
復(fù)制代碼 |
-
-
原來的程序.rar
2021-12-28 16:19 上傳
點(diǎn)擊文件名下載附件
593.54 KB, 下載次數(shù): 21
-
-
修改的程序.zip
2021-12-28 16:19 上傳
點(diǎn)擊文件名下載附件
76.13 KB, 下載次數(shù): 15
|