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

📄 chengxu.c

📁 单路带数码管可编程可调节延时模块
💻 C
字号:
/********************************************************************
                            汇诚科技

实现功能: 接通电源继电器吸合30分钟断开
使用芯片:STC12C5204AD
晶振:11.0592MHZ
编译环境:Keil
硬件环境:四位数显两路输入三按键 (kzs1211-75150k (双路输入,继电器单路输出,三个按键,四位数码管模块))
作者:yang
QQ:790244909
网站:www.ourhc.cn
物联网测试网站:http://hualongelectron.eicp.net/
日期:2013-04-02
淘宝店:
      华龙电子直销:http://hlelectrony.taobao.com 
      电子开发直销:http://shop63233873.taobao.com 
	  汇诚科技网路购物:http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
********************************************************************/       
/********************************************************************
 接通电源继电器吸合30分钟断开,数码管前两位显示分钟,后两位显示秒
采用倒计时方式计时
********************************************************************/

#include<STC12C52.h>  	       //库文件
#include <intrins.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
#define FOSC 11059200L
#define BAUD  9600

#define ADC_POWER   0x80            //ADC 电源控制位
#define ADC_FLAG    0x10            //ADC 转换结束标志位
#define ADC_START   0x08            //ADC 开始转换控制位
#define ADC_SPEEDLL 0x00            //420个时钟周期转换一次
#define ADC_SPEEDL  0x20            //280 个时钟周期转换一次
#define ADC_SPEEDH  0x40            //140个时钟周期转换一次
#define ADC_SPEEDHH 0x60            //70个时钟周期转换一次
void display(void);                  //显示函数
void t_to_dis(uchar num);

#define DUAN P2	           //P0口控制段
#define WEI  P1	           //P2口控制位
/********************************************************************
                            初始定义
*********************************************************************/
//数码管显示段码 
code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
//数码管位控制端
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;  
//继电器输出控制端                            
sbit OUT=P3^7;
//按键输入控制端
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
//两路输入控制端可做ad采样
sbit IN0=P1^6;
sbit IN1=P1^7;
uchar numb[4];	      //定义字符串用于数值转换
uint tcnt;
uchar miao=0;
uchar fen=0;

/********************************************************************
                            延时函数
*********************************************************************/
void delay(uint x)//延时程序 0.1秒
{
	uint m,n,s;
	for(m=x;m>0;m--)
	for(n=20;n>0;n--)
	for(s=248;s>0;s--);
}
		   
/********************************************************************
                           IO口初始化函数
*********************************************************************/    
void init_all(void)
{		
    P2M1=0;
	P2M0=0xff;
	P1M1=0x80;
	P1M0=0x0f;
	P3M1&=0x7f;
	P3M0|=0x80;
} 
/********************************************************************
                           定时器T1初始化
*********************************************************************/
void timer0init(void)
{ 
	 TMOD=0X10;                  //设定定时器工作方式
	 TH1 =0x4c;
     TL1 =0x00;
	 ET1=1;
	 TR1=1;
	 EA=1;
 }
/********************************************************************
                            主函数
*********************************************************************/
void main()
{	 
    init_all();	 //初始化IO
	timer0init();//定时器初始化
	OUT=1;
	while(1)
	{  
		 t_to_dis(miao);   //数值变换
		 display();  	  //显示
		if(tcnt>=20)   //秒减去1
		{
			 tcnt=0;
		     miao++;
			 if(miao>=60)	//60秒,分钟变量加1
			 {
				miao=0;
				fen++;
				if(fen>=30)
				{
				  fen=0;
				  TR1=0;
				  OUT=0;
				}
			 }
		 }
    }
}
/********************************************************************
                           定时器T1中断函数
*********************************************************************/
void timer1(void)interrupt 3  using 2
{ 	 
     TH1 =0x4c;
     TL1 =0x00;
 	tcnt++;


}
/********************************************************************
                            求值函数
*********************************************************************/
void t_to_dis(uchar num)
{
	numb[0]=fen/10;	                //显示千位
	numb[1]=fen%10;	        //显示百位
	numb[2]=num/10;		    //显示十位
	numb[3]=num%10;             //显示个位
}
/********************************************************************
                            显示函数
*********************************************************************/
void display()                  //显示函数
{
      WEI&=0XF0;
	  DUAN=seg7code[numb[0]];
	  wei1=1;
	  delay(1);

	  WEI&=0XF0;  
      DUAN=seg7code[numb[1]]&0x7f;
	  wei2=1;
	  delay(1);

	  WEI&=0XF0;  
   	  DUAN=seg7code[numb[2]];
	  wei3=1;
	  delay(1);

	  WEI&=0XF0;  
      DUAN=seg7code[numb[3]];
	  wei4=1;
	  delay(1);
	  WEI&=0XF0;
} 	
/********************************************************************
                              结束
*********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -