- 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)