⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 protues编的数字电压表
💻 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 + -