|
发表于 2024-8-11 09:20:05
|
显示全部楼层
#include "STC8G.H"
#include "system.h"
#include "seg8display.h"
#include "STC8G_10AD.h"
#define MAIN_Fosc 11059200UL //¶¨ÒåÖ÷ʱÖÓ
#define Timer0_Reload (MAIN_Fosc / 1000) //Timer 0 ÖÐ¶ÏÆµÂÊ, 1000´Î/Ãë
u8 t0_ct;
int vcc,vcc_1;
bit AD_change_bit,key_1_bit;
sbit LED_8 = P3^7;
sbit LED_7 = P3^6;
sbit LED_6 = P3^5;
sbit LED_5 = P3^4;
sbit LED_4 = P3^3;
sbit LED_3 = P3^2;
sbit LED_2 = P3^1;
sbit LED_1 = P3^0;
sbit key_1 = P1^7;
void IO_init_config(void);
void IO_init_config(void)
{
P0M1 = 0x00;
P0M0 = 0x00;; //P0ÉèÖÃΪ׼˫Ïò¿Ú
P1M1 = 0x00;
P1M0 = 0x00;; //P1ÉèÖÃΪ׼˫Ïò¿Ú
P2M1 = 0x00;
P2M0 = 0x00;; //P2ÉèÖÃΪ׼˫Ïò¿Ú
P3M1 = 0x00;
P3M0 = 0x00;; //P3ÉèÖÃΪ׼˫Ïò¿Ú
P4M1 = 0x00;
P4M0 = 0x00;; //P4ÉèÖÃΪ׼˫Ïò¿Ú
P5M1 = 0x00;
P5M0 = 0x00;; //P5ÉèÖÃΪ׼˫Ïò¿Ú
}
void timer0_int (void) interrupt 1 //¶¨Ê±ÖжϷ½Ê½//
{
Display_seg(); //1MSɨÃè
if(++t0_ct >= 100) //0.1SÉÁ˸һ´Î
{ t0_ct = 0; AD_change_bit = 1;}
}
//8888888888888888888888888888888888888888888888888888888888888888888888888888888//
void main()//Ö÷³ÌÐò
{ IO_init_config();STC8G_ADC_Iint();
TR0 = 0; //Í£Ö¹¼ÆÊý
ET0 = 1; //ÔÊÐíÖжÏ
TMOD &= ~0x03;
TMOD |= 0; //¹¤×÷ģʽ, 0: 16λ×Ô¶¯ÖØ×°,
TMOD &= ~0x04; //¶¨Ê±
INTCLKO &= ~0x01; //²»Êä³öʱÖÓ
AUXR &= ~0x80; //12T mode
TH0 = (u8)((65536UL - Timer0_Reload/12) / 256);
TL0 = (u8)((65536UL - Timer0_Reload/12) % 256);
TR0 = 1;
EA = 1;
while(1)
{//AD_change_bit ½Óͨһ´Î¾ÍÑ»··¢ËÍÒ»´ÎÊý¾Ýµ½ÊýÂë¹Ü,¼ä¸ôʱ¼äÓÉtimer0_int¾ö¶¨//
if (key_1 == 0) {if (key_1_bit == 1) {key_1_bit = 0; } else {key_1_bit = 1; } while(key_1 == 0); }//µ¥°´¼üÇл»on¡¢off//
if (key_1_bit) { AD_change_bit = 0; Display_Buff(); vcc_1=(ADC_RES<<8)|ADC_RESL; vcc = vcc_1*4;}//ÏÔʾģʽ1
else{Display_Buffee();vcc_1=(ADC_RES<<8)|ADC_RESL; vcc = vcc_1*4;} //ÏÔʾģʽ2
if (vcc > 800){LED_8 = 0; LED_7 = 0; LED_6 = 0; LED_5 = 0; LED_4 = 0; LED_3 = 0; LED_2 = 0; LED_1 = 0; }//¸ù¾Ýµçѹ´óСµãÁÁ²»Í¬LED
else if (vcc > 700){LED_8 = 1; LED_7 = 0; LED_6 = 0; LED_5 = 0; LED_4 = 0; LED_3 = 0; LED_2 = 0; LED_1 = 0; }
else if (vcc > 600){LED_8 = 1; LED_7 = 1; LED_6 = 0; LED_5 = 0; LED_4 = 0; LED_3 = 0; LED_2 = 0; LED_1 = 0; }
else if (vcc > 500){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 0; LED_4 = 0; LED_3 = 0; LED_2 = 0; LED_1 = 0; }
else if (vcc > 400){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 1; LED_4 = 0; LED_3 = 0; LED_2 = 0; LED_1 = 0; }
else if (vcc > 300){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 1; LED_4 = 1; LED_3 = 0; LED_2 = 0; LED_1 = 0; }
else if (vcc > 200){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 1; LED_4 = 1; LED_3 = 1; LED_2 = 0; LED_1 = 0; }
else if (vcc > 100){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 1; LED_4 = 1; LED_3 = 1; LED_2 = 1; LED_1 = 0; }
else if (vcc > 000){LED_8 = 1; LED_7 = 1; LED_6 = 1; LED_5 = 1; LED_4 = 1; LED_3 = 1; LED_2 = 1; LED_1 = 1; }
}
}
这是其中一部分程序
最终在STC找了个ADC数码管显示模拟量的 修改了下可以符合我的要求 |
|