?? rs1.c
字號:
#include<reg52.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_()
#define DISOFF 0X3F
#define TH0_RELOAD 0xd8 //10ms定時器中斷重載值
#define TL0_RELOAD 0xef
/*Timer*/
bit bdata f_10ms; /*T0中斷10ms到標志*/
bit bdata f_20ms; /*20ms按鍵判斷標志*/
bit bdata f_200ms; /*20ms按鍵判斷標志*/
bit bdata f_400ms; /*400ms按鍵判斷標志*/
bit bdata f_1s; /*1秒采樣標志*/
bit bdata f_20s; /*20秒一個控制周期標志*/
#define INT20MSCOUNT 2
uchar data cnt_20ms=INT20MSCOUNT;/*按鍵判斷20ms*/
#define INT200MSCOUNT 10
uchar data cnt_200ms=INT200MSCOUNT;/*AD讀500ms*/
#define INT400MSCOUNT 2
uchar data cnt_400ms=INT400MSCOUNT;/*AD讀500ms*/
#define INT1SCOUNT 2
uchar data cnt_1s=INT1SCOUNT;/*1s*/
#define INT20SCOUNT 20
uchar data cnt_20s=INT20SCOUNT;/*定時20s計數器*/
//********************************
#define LED2_PORT P0
uchar data disbuf[2]={0,0};
uchar data temper[2]={0,0};
uchar code distab[10]={0x41,0xe7,0x52,0x62,0xe4,0x68,0x48,0xe3,0x40,0x60};
uchar code tab_w[]={0X80,0X40};/*LED2,LED1,位選碼表 P2.6-->LED2,P2.7-->LED1*/
//P1 |= B0000_0111 熄滅
sbit LED1 = P2^7;
sbit LED2 = P2^6;
uchar data scan;/*顯示哪個LED*/
uchar data adtmp[10];
uchar data sec_cnt;
uchar data keytask;
bit bdata fkey;
uchar data led_cnt;
//********************************
void main_init(void);
void uart_init(void);
void ad_init(void);
void dis_init(void);
void send8(uchar temp);
void delay(uint temp);
uchar tlc549(void);
uchar datlb(uchar data adc);/*數據濾波,和前9次采樣值一起,去最大最小值,取平均值*/
void datclf(uchar data ad_dat);
void tim0_mainloop(void);
void dis_mainloop(void);
void ad_mainloop(void);
void data_mainloop(void);
void tim0_init(void);
void key_mainloop(void);
//********************************
void main(void)
{
main_init();
EA = 1;
//send8(0x55);send8(0xaa);
while(1)
{
tim0_mainloop();
dis_mainloop();
//send8(0x55);send8(0xaa);
}
}
//****************************
void dis_mainloop()
{
uchar ch;
if(!f_10ms)return;
f_10ms = 0;
P2 &= DISOFF;//關顯示
ch = disbuf[scan]; /*得到當前要顯示值*/
LED2_PORT = distab[ch];
P2 |= tab_w[scan];
if(++scan==2)scan=0;
}
//********************************
//*產生各種時間控制
void tim0_mainloop()
{ if(!f_10ms) return;
if(--cnt_20ms==0)
{
cnt_20ms=INT20MSCOUNT;
f_20ms=1; /*20ms*/
if(--cnt_200ms==0)
{
cnt_200ms=INT200MSCOUNT;
f_200ms=1; /*200ms*/
if(--cnt_400ms==0)
{
cnt_400ms=INT400MSCOUNT;
f_400ms=1; /*400ms*/
if(--cnt_1s==0)
{
cnt_1s=INT1SCOUNT;
f_1s=1; /*1s*/
if(--cnt_20s==0)
{
cnt_20s=INT20SCOUNT;
f_20s=1; /*20秒*/
}
}
}
}
}
}
//*********************
void main_init(void)
{
uart_init();
// dis_init();
tim0_init();
scan=0;
sec_cnt=0;
}
//*********************
/*定時器0中斷服務,產生10ms定時*/
void tim0(void) interrupt 1
{
TH0=TH0_RELOAD;TL0=TL0_RELOAD;
f_10ms=1;
}
//*********************
void serial(void) interrupt 4
{
uchar temp;
if(RI)RI=0;
temp=SBUF;
send8(temp);
disbuf[0] =temp/10;
disbuf[1] =temp%10;
if(disbuf[0]>9){disbuf[0]=9;disbuf[1]=9;}
}
//*********************
void tim0_init(void)
{
TMOD=0x01; /*T0定時10ms中斷顯示*/
TH0=TH0_RELOAD;
TL0=TL0_RELOAD;
ET0=1;
TR0=1;
}
//*********************
void uart_init(void)
{
T2CON = 0x34;//12clk-9600 6clk-19200
RCAP2H = 0xFF;
RCAP2L = 0xD9;
SCON = 0x50;
ES=1;//串口中斷
}
//*********************
void send8(uchar temp)
{
SBUF = temp;
while(!TI);
TI=0;
}
//*********************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -