您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页include

include

来源:华佗养生网
#include

#define uchar unsigned char /*宏定义 */ #define uint unsigned int /*宏定义 */ /****专用数码管显示表***/

uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; /*0x40显示“一”符号*/ uchar code wema[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7}; /*小时hour 分min 秒sec*/

uchar hour,hour_h,hour_l; /*定义小时,小时的高位,小时的低位*/ uchar min,min_h,min_l; /*分*/ uchar sec,sec_h,sec_l; /*秒*/

uchar int_num; /*定时溢出作用标号*/

sbit key_secadd=P0^0; /*定义了 p0.0为秒增1键,用在调时中断里*/ sbit key_minadd=P0^1; /*定义了 p0.1为分增1键,用在调时中断里*/ sbit key_houradd=P0^2; /*定义了 p0.2为时增1键,用在调时中断里*/ void delay(uchar time); /*延时子函数声明*/ void display(); /*显示子函数声明*/ void inter_init(); /*定时器初始化子函数声明*/ void time24();

void main() {

inter_init(); /*定时器初始化*/

hour= 23; /*自定义一个初值,方便快速观察翻转状态(可修改)*/ min= 59; sec= 50; while(1) {

time24();

/*分开时间,分别显示字符*/

sec_h=sec/10; /*求出秒高位需要显示的字符*/ sec_l=sec%10; /*求出秒低位需要显示的字符*/ min_h=min/10; min_l=min%10; hour_h=hour/10; hour_l=hour%10;

display(); /*调用显示函数来显示*/ } }

void time0(void) interrupt 1 /*定时器T0服务子程序*/ {

TH0=(65535-50000)/256; TL0=(65535-50000)%256; int_num++;

}

void intsvr0(void) interrupt 0 /*外部中断INT0服务函数*/ {

// EA=0; /*关掉总中断*/ hour=0; min=0; sec=0; while(1) {

if(key_secadd==0) {

delay(80); if(key_secadd==0) {

sec++;

while(!key_secadd); if(sec==60) {

sec=0; } } }

if(key_minadd==0) {

delay(80); if(key_minadd==0) {

min++;

while(!key_minadd); if(min==60) {

min=0; } } }

if(key_houradd==0) {

delay(80);

if(key_houradd==0)

{ hour++;

while(!key_houradd); if(hour==24) {

hour=0; } } }

sec_h=sec/10; /*求出秒高位需要显示的字符*/ sec_l=sec%10; /*求出秒低位需要显示的字符*/ min_h=min/10; min_l=min%10; hour_h=hour/10; hour_l=hour%10;

display(); /*调用显示函数来显示*/ } }

void delay(uchar time) /*延时子函数*/ {

uchar time_1; for (;time>0;time--)

for (time_1=100;time_1>0;time_1--); }

void display() /*数码管显示子函数*/ {

P2=duma[sec_h]; /*显示秒高位*/ P1=wema[6]; delay(10);

P2=duma[sec_l]; /*显示秒低位*/ P1=wema[7]; delay(10);

P2=duma[10]; /* “一”符号的显示 */ P1=wema[5]; delay(10);

P2=duma[min_h]; /*分*/ P1=wema[3]; delay(10); P2=duma[min_l]; P1=wema[4]; delay(10);

P2=duma[10]; /* “一”符号的显示 */ P1=wema[2]; delay(10);

P2=duma[hour_h]; /*时*/

P1=wema[0]; delay(10); P2=duma[hour_l]; P1=wema[1]; delay(10); }

void inter_init() /*定时器初始化子函数*/ {

EA=1; /*开总中断*/

EX0=1; /*开外部中断0*/ ET0=1; /*打开定时器T0*/ TMOD=0x01; /*工作方式1*/ TCON = 0x00; /*触发方式*/

IP = 0x01; /*中断优先级别,T0优先*/

TH0=(65535-50000)/256; /*置初值,大约50ms一个中断 */ TL0=(65535-50000)%256;

TR0=1; /*置位TR0,启动定时器0*/ }

void time24() /*时间递增*/ {

if(int_num==20) /*值满20,大约就是一秒的时间。*/

{ /* 其值设为2,则定时时间快10倍,可做毫秒计时*/ int_num=0;

sec++; /*秒值加1*/

if(sec==60) /*如果秒值满60,就归0*/ { sec=0;

min++; /*分值加1*/ if(min==60) {

min=0;

hour++; /*分值归0,时值加1*/ if(hour==24) {

hour=0; /*时值满24归0*/ } }

} } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务