📄 main.c
字号:
#include <reg52.h>
#define TIME_PER_SEC 480 //定义定时器定时频率
#define CLOCK 12000000 //系统时钟
#define LED_SEG_PORT P0 //定义数码管接口
#define LED_BIT_PORT P2
sbit key0 = P3^4;
sbit key1 = P3^5;
sbit wr = P3^6;
sbit rd = P3^7;
unsigned char beep_flag;
unsigned long int counter;
extern delay(unsigned int);
unsigned char segcode[]=
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0
};//共阴极
unsigned char led_buf[]={0,0,0,0,0,0,0}; //6只数码管
//定时器初始化
void Init_Timer1(void)
{
TMOD = (TMOD & 0X0F) | 0X10; //定时器1工作在模式1,16Bit定时器模式
TH1 = 255-CLOCK/TIME_PER_SEC/12/256;
TL1 = 255-CLOCK/TIME_PER_SEC/12%256;
TR1 = 1;
ET1 = 1;//开启定时器和中断
}
main()
{
beep_flag=0;
Init_Timer1();
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
EA = 1;
wr=1;
rd=0;//ADC数据直接输出(一直输出)
while(1)
{
wr=0;
wr=1;//启动ADC
/***以下按十进制取模,更新显示缓冲区***/
led_buf[0] = counter%10;
led_buf[1] = (counter/10)%10;
led_buf[2] = (counter/100)%10+10;//+10就是加小数点
led_buf[3] = 20;//熄灭
led_buf[4] = 20;//熄灭
led_buf[5] = 20;//熄灭
/*************************************/
delay(1000);//延时等待ADC结束
counter = P1*2; //从P1口读数据
}
}
/*定时器中断,完成数码管显示刷新*/
void time() interrupt 3
{
static unsigned char i=0;
TH1 = 255-CLOCK/TIME_PER_SEC/12/256;
TL1 = 255-CLOCK/TIME_PER_SEC/12%256;
i=++i%6;
LED_BIT_PORT = 0x0|beep_flag; //关所有数码管
LED_SEG_PORT = segcode[led_buf[i]];
LED_BIT_PORT = (1<<i)|beep_flag;
}
/*外部中断0函数*/
void int_0() interrupt 0
{
}
/*外部中断1函数*/
void int_1() interrupt 2
{
}
/*常用延时函数,t<65536*/
delay(unsigned int t)
{
while(--t);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -