📄 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 + -