程序名: 倒计时
编写人:
编写时间:
硬件支持: STCC52 外部12MHZ晶振
接口说明:
修改日志:
NO.1-
/*********************************************************************************************
说明:
/*********************************************************************************************/
#include /********************************************************************************************* #define [代替名] 原名] //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED PORT sbit [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1; /*********************************************************************************************/ #define uchar unsigned char //定义一下方便使用 #define uint unsigned int sbit KEY1=P2^0; //启动键 sbit KEY2=P2^1; //加键 sbit KEY3=P2^2; //清零键 sbit fmq=P3^3; //蜂鸣器 sbit jdq=P3^7; //继电器 uchar TIME_SS=0,TIME_MM=1,TIME_HH=0; uchar cou=0; uchar MENU=0; sbit dian=P0^7; //秒点 uchar code table[]= //code 表示编码的意思,定义数组是占用内存空间的,而定义编码时是直接分配到程序空间 { // 0 1 2 3 4 5 6 7 8 9 }; //共阳数码管显示字型码数组 /********************************************************************************************* 函数名:毫秒级CPU延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 占用CPU的延时程序还需要考虑单片机的机械周期,12T单片机(ATC51)与1T单片机(STC11F32XE)的延时长度不同。) /*********************************************************************************************/ v延时程序(12MHz 10倍于51单片机速度时) { } /*********************************************************************************************/ /********************************************************************************************* 函数名:500us基准延时函数 调 用:delay500us(); 参 数:无 返回值:无 结 果: 备 注:用于蜂鸣器发声 /**********************************************************************************************/ void delay500us() { } /********************************************************************************************* 函数名:产生1KHZ频率声音的函数 调 用:beep(); 参 数:无 返回值:无 结 果: 备 注: /**********************************************************************************************/ void beep() { } /********************************************************************************************* 函数名:驱动数码管显示函数 调 用:display (?); 参 数:1~255(参数不可为0) 返回值:无 结 果: 备 注: /*********************************************************************************************/ void display(unsigned char TIME_SS,unsigned char TIME_MM) { // 0 1 2 3 4 5 6 7 8 9 A b C d E F 无 段选送4 位选个位 关闭所有显示 段选送3 位选十位 P1=0xff; //关闭所有显示 段选送2 显示秒点 位选百位 关闭所有显示 段选送1 位选千位 关闭所有显示 } /********************************************************************************************* 函数名:按键扫描函数 调 用:KEY ( ); 参 数:无 返回值:无 结 果: 备 注: /*********************************************************************************************/ void KEY( ) { } /********************************************************************************************* 函数名:定时/计数器初始化函数 调 用:T_C_init(); 参 数:无 返回值:无 结 果:设置SFR中T/C1和(或)T/C0相关参数 备 注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽 /**********************************************************************************************/ void T_C_init ( ) { 使用定时器T0的模式1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ] 中断总开关 定时器T0的高8位赋初值 定时器T0的低8位赋初值 中断开关 启动开关 初态为停 } /**********************************************************************************************/ /********************************************************************************************* 函数名:主函数 调 用:无 参 数:无 返回值:无 结 果:程序开始处,无限循环 备 注: /**********************************************************************************************/ void main ( ) { 定时/计数器初始化 数码管显示 按键扫描 } /*********************************************************************************************/ /********************************************************************************************* 函数名:定时/计数器0中断处理函数 调 用:[T/C0溢出后中断处理] 参 数:无 返回值:无 结 果:重新写入16位计数寄存器初始值,处理用户程序 备 注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致? /**********************************************************************************************/ v中断服务程序(产生50ms时基信号) 定时器T0的高8位赋初值(重新写入初值) 定时器T0的低8位赋初值(重新写入初值) 计数值到100(1s) (****时间为倒计时****) cou = 20; // 软计数器清零 秒计数值到60 TIME_SS = 60; // 秒计数器清零 分计数到60 TIME_MM = 60; // 分计数器清零 //if(TIME_HH ==0) // 时计数到 //TIME_HH = 24; // TIME_HH--; // 时计数器加1(进位 } TIME_MM--; // 分计数器加1(进位60s=1m) } TIME_SS--; // 秒计数器加1(进位 cou--; // 软计数器加 } /**********************************************************************************************/ /*****************************************************************************/ //羽翼电子工作室 http://yuyidianzi.taobao.com /*****************************************************************************/