完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`主函数
#include "main.h" #include "time.h" #include "seg7.h" #include "extern_int.h" unsigned char s=0,m=0,h=0; ***it h_button=P3^3; ***it m_button=P3^4; void delay(unsigned long n) { for(;n>0;n--); } void main(void) { EA=1;//中断器总开关 init_timer0();//初始化定时器0 extern_int0_init();//初始化外部中断0 while(1) { disp_u8(h,m,s); if(h_button==0) { h++; while(!h_button); } if(m_button==0) { m++; while(!m_button); } if(timer_int_times==20) { s++; timer_int_times=0; } if(s==60) { s=0; m++; } if(m==60) { m=0; h++; } if(h==24) { h=0; } disp_fresh(); } } 主函数头文件 #ifndef _MAIN_H_ #define _MAIN_H_ #include typedef unsigned char u8; extern void delay(unsigned long n); extern unsigned char int_flag; #endif 定时器函数 #include "main.h" #include "time.h" unsigned int timer_int_times=0;//定时器中断次数 void timer0_int(void) interrupt 1 //50ms就会中断到这里 { TH0=0x3C; //高8位 TL0=0xB0; //低8位 timer_int_times++; } void init_timer0(void) { TMOD=0x01;//定时器0工作方式0; TR0=1; //定时器0运行控制位:由软件决定开启关闭定时器; ET0=1;//定时器0 源允许开关 开启; /*定时器在方式1工作是16位计数器最大值65536-50ms也就是50000个机器周期=65536-50000=15536 也就是3CB0*/ TH0=0x3C; //高8位 TL0=0xB0; //低8位 } 定时器函数头文件 #ifndef _TIME_H_ #define _TIME_H_ extern void timer0_int(void); extern void init_timer0(void); extern unsigned int timer_int_times; #endif 8段数码管函数 #include "main.h" #include "sge7.h" #define SEG7_0_ON P2=0 #define SEG7_1_ON P2=1 #define SEG7_2_ON P2=2 #define SEG7_3_ON P2=3 #define SEG7_4_ON P2=4 #define SEG7_5_ON P2=5 #define SEG7_6_ON P2=6 #define SEG7_7_ON P2=7 #define SYM_BLANK 10//空白段码 #define SYM_LIN 11//中横线 u8 disp_mem[9]; unsigned char code SEG_MASK[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0x40}; void disp_seg7(unsigned char digital) { P0=SEG_MASK[digital];//输出断码 } void disp_u8(u8 x,u8 y,u8 z) { disp_mem[0]=x/10; disp_mem[1]=x%10; disp_mem[2]=SYM_LIN; disp_mem[3]=y/10; disp_mem[4]=y%10; disp_mem[5]=SYM_LIN; disp_mem[6]=z/10; disp_mem[7]=z%10; } void disp_fresh(void) { SEG7_0_ON; disp_seg7(disp_mem[0]); delay(50); SEG7_1_ON; disp_seg7(disp_mem[1]); delay(50); SEG7_2_ON; disp_seg7(disp_mem[2]); delay(50); SEG7_3_ON; disp_seg7(disp_mem[3]); delay(50); SEG7_4_ON; disp_seg7(disp_mem[4]); delay(50); SEG7_5_ON; disp_seg7(disp_mem[5]); delay(50); SEG7_6_ON; disp_seg7(disp_mem[6]); delay(50); SEG7_7_ON; disp_seg7(disp_mem[7]); delay(50); } 8段数码管头文件 #ifndef _SEG7_H_ #define _SEG7_H_ extern void disp_seg7(unsigned char digital); extern void disp_u8(u8 x,u8 y,u8 z); extern void disp_fresh(void); #endif 外部中断0文件 #include "main.h" #include "extern_int.h" unsigned char int_flag=1; void extern_int0_init(void) { EX0=1;//打开外部中断0 中断源允许 IT0=1;//中断方式为下降沿触发 PX0=1;//设置高优先级 } void extern_int0(void) interrupt 0 //外部中断0 { if(int_flag) { TR0=0;//停止外部定时器0 } else { TR0=1; } int_flag=!int_flag; } 外部中断头文件 #ifndef _EXTERN_INT_H_ #define _EXTERN_INT_H_ extern void extern_int0_init(void); extern void extern_int0(void); #endif ` |
|
相关推荐
|
|
努力ing
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2077 浏览 1 评论
3505 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2333 浏览 2 评论
2760 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4015 浏览 5 评论
966浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6349浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 20:15 , Processed in 0.659778 second(s), Total 59, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号