51单片机_T0定时计数器.docVIP

  • 31
  • 0
  • 约2.29千字
  • 约 4页
  • 2017-06-07 发布于重庆
  • 举报
51单片机_T0定时计数器

《51系列单片机_定时、计数器》源文件 此程序使用 单片机89SC52 // 1、 定时器T0,此程序中T0工作于定时器模式,使用中断,精确计时1秒,每秒数码管显示的数值加1,LED指示灯状态取反 #include #define iniNum 45872 //晶振频率为11.0592计时50ms的计数值 int num, count; void delay_ms unsigned int n //软件延时函数,延时n毫秒 unsigned int i, j; for i n;i 0;i-- for j 110;j 0;j-- ; void display int num,int rep //控制数码管按位输出显示数值num,显示时间为 2*rep 毫秒 char BitSet[8] 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe ; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管 char NumberCode[16] 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, ; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值 int n, r rep, i; while r-- 0 n num; i 0; while n 0 P0 0xff; //关闭数码管当前位的显示,共阳极关闭显示段选信号 P2 BitSet[i]; //选中数码管对应的位 P0 ~NumberCode[n%10]; //向数码管的对应位中送入该位数值对应的段选信号 delay_ms 2 ; //每一位延时显示2ms P2 0xff; //关闭所有位选 i++; //位标记 n n/10; //取数值n的商 if n 0 break; //当取得的商为0时退出while循环 void main num 0; //初始化计数值 count 0; TMOD 0x01; //设置定时器0工作于方式1,16位计数方式 TH0 65536-iniNum /256; TL0 65536-iniNum %256; //从iniNum计数到65536,每次计时50ms EA 1; //开总中断 ET0 1; //开定时器0中断 TR0 1; //启动定时器0 while 1 if count 20 //每20次中断即每1s,处理一次 num++; //显示数值加1 count 0; P1 ~P1; //指示灯状态取反 display num, 1 ; //用数码管输出显示num void int_T0 interrupt 1 //定时器T0中断 count++; TH0 65536-iniNum /256; TL0 65536-iniNum %256; // 2、 计数器T0,此程序中T0工作于计数器模式,每次按下按键key3触发计数中断时,数码管显示的数值加1 //计数器T0中断,由按键k3触发 #include void delay_ms unsigned int n //软件延时函数,延时n毫秒 unsigned int i, j; for i n;i 0;i-- for j 110;j 0;j-- ; void display int num,int rep //控制数码管按位输出显示数值num,显示时间为 2*rep 毫秒 char BitSet[8] 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe ; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管 char NumberCode[16] 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, ; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值 int n, r rep, i; while r-- 0 n num; i 0; while n 0 P0 0xff; //关闭数码管当前位的显示,共阳极关闭显示段选信号 P2 BitSet[i]; //选中数码管对应的位 P0 ~NumberCode[n%10]; //向数码管的对应位中送入该位数值对应的段选信号 de

文档评论(0)

1亿VIP精品文档

相关文档