简单51单片机数字钟
Posted py_taotao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单51单片机数字钟相关的知识,希望对你有一定的参考价值。
51单片机数字钟
#include <reg51.h>
sbit P3_3=P3^3; //定义按键
sbit P3_2=P3^2; //定义按键
///
void delay(unsigned long t)
unsigned long i;
for(i=0;i<t;i++) ; //定义延时函数delay
///
unsigned char miao; //定义秒
unsigned char fen; //定义分
unsigned char shi; //定义时
void main()
unsigned char led[10]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;
//共阴数码管 定义led[10] 存放数字0~9的字符码
unsigned char seg[6]=0x80,0x40,0x20,0x10,0x08,0x04;
//控制哪一个数码管显示
unsigned char buf[6]; //buf[0] \\buf[1] \\.....buf[5]
unsigned char i;
///
TMOD=0x01; //采用16位的计时计数器
TH0=(65536-46080)/256; //0x4c 65536是2的16次方
TL0=(65536-46080)%256; //0x00
//晶振11.0592M 11.0592Mhz除12为921600HZ,就是921600次机器周期,50ms=40680次机器周期
//65536-40680=19456(4c 00) 4*16*16*16+12*16*16=19456
TR0=1; // TR0 :TR0=1表示T0开始运行。(单片机中T1引脚,需要高低电平的驱动)
ET0=1; //开启定时器中断 T0中断允许位
EA=1; 打开总中断
while(1)
buf[0]=shi%100/10; buf[1]=shi%10/1; //分出小时的十位 个位
buf[2]=fen%100/10; buf[3]=fen%10/1; //分出分的十位 个位
buf[4]=miao%100/10; buf[5]=miao%10/1; //分出秒的十位 个位
for(i=0;i<6;i++)
P0=~led[ buf[i] ]; //控制数码管显示什么符号
P2=~seg[i]; //控制哪一个数码管显示
delay(10);
/
if(P3_2==0)
delay(10); //消抖
if(P3_2==0) shi++; if(shi==24) shi=0;
while(P3_2==0) ; //等待按键松开
if(P3_3==0)
delay(10); //消抖
if(P3_3==0) fen++; if(fen==60) fen=0;
while(P3_3==0) ; //等待按键松开
/
unsigned char cnt=0;
void t0_s(void) interrupt 1 //interrupt 1 指明是定时器中断0
TF0=0; // 表示定时器0初始化。
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
cnt++;
if(cnt==20 ) miao++; cnt=0; //进行频率的累加 达成一秒
if(miao==60 ) fen++; miao=0; //累加60秒成一分钟
if(fen==60 ) shi++; fen=0; //累加60分成一小时
if(shi==24) shi=0; //累加24小时 清零
刚刚学51单片机有错的可以评论 大佬牛皮!!!!
以上是关于简单51单片机数字钟的主要内容,如果未能解决你的问题,请参考以下文章
资料分享基于8051单片机与1601LCD的计算器设计(仿真 程序 论文)基于51单片机数字电压表的设计(仿真程序原理图论文)