基于51单片机的8位数码管显示的可调时电子时钟

本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正。

  1. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60HZ左右刷新一次,用了两个定时器,定时器0负责LED循环显示,定时器1负责定时,大概200秒左右落后1秒。
#include <REGX51.H>
#include <intrins.h>
void begin();
void ledshow();
unsigned char number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40};
unsigned char wei[]={0xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,0xff};
unsigned char num[8];
unsigned char hour,min,sec;
int main(){begin();hour=8;min=56;sec=00;while(1){ledshow();}
}void begin(){TMOD &= 0xF0;        //???????TL0 = 0x18;       //??????TH0 = 0xC4;        //??????TF0 = 0;       //??TF0??TR0 = 1;      //???0????TMOD &= 0x0F;        //???????TMOD |= 0x10;     //???????TL1 = 0x00;       //??????TH1 = 0xF7;        //??????TF1 = 0;       //??TF1??TR1 = 1;      //???1????EA=1;ET0=1;ET1=1;
}void ledshow(){num[0]=number[hour/10];num[1]=number[hour%10];num[2]=~number[10];num[3]=number[min/10];num[4]=number[min%10];num[5]=~number[10];num[6]=number[sec/10];num[7]=number[sec%10];
}void BBBBBBBB() interrupt 1{static char i=0;TL0 = 0x18;      //??????TH0 = 0xC4;        //??????P0=0;P2=~wei[i];P0=~num[i];i++;if(i>7){i=0;}
}
void AAAAAAAA() interrupt 3{static unsigned int n=0;TL1 = 0x00;       //??????TH1 = 0xF7;        //??????n++;if(n==400){n=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++; if(hour==24){hour=0;}}}}
}

2.第二段代码为可调电子时钟,K1负责退出选位操作,K2负责选位,K3负责加1,K4负责减1.看

#include <REGX52.H>
#include <intrins.h>
void begin();
void ledshow();
char keymode();
void Delay10ms();
void Delay2080us();
void K2(char i);
void K3();
void K4();
unsigned char number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40};
unsigned char wei[]={0xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,0xff};
unsigned char num[8];
char hour,min,sec;
char x=2;
sbit key_1=P3^1;
sbit key_2=P3^0;
sbit key_3=P3^2;
sbit key_4=P3^3;
int main(){unsigned char key,i=0;begin();hour=11;min=11;sec=11;while(1){ledshow();if(keymode()==1){key=1;}if(keymode()==2){key=2;switch(x){case 0:i=1;break;case 1:i=4;break;case 2:i=7;break;}}switch(key){case 1: ET0=1;break;case 2: ET0=0;K3();K4();K2(i); break;default:ET0=1;}}
}void begin(){TMOD &= 0xF0;        //???????TL0 = 0x18;       //??????TH0 = 0xC4;        //??????TF0 = 0;       //??TF0??TR0 = 1;      //???0TMOD &= 0x0F;        //???????TMOD |= 0x10;     //???????TL1 = 0x00;       //??????TH1 = 0xF7;        //??????TF1 = 0;       //??TF1??TR1 = 1;      //???1????EA=1;ET0=1;ET1=1;
}char keymode(){char key;if(key_1==0){Delay10ms();if(key_1==0){while(key_1==0);key=1;}}else if(key_2==0){Delay10ms();if(key_2==0){while(key_2==0);key=2;  x++;if(x>2){x=0;}}}return key;
}void K2(char i){static char j=0;static char t;t++;if(t/100==1){if(j==i||j+1==i){P0=0;P2=~wei[j];}else{P0=0;P2=~wei[j];P0=~num[j];}}else{P0=0;P2=~wei[j];P0=~num[j];}if(t>200){t=0;}j++;if(j>7){j=0;}Delay2080us();
}void K3(){if(key_3==0){Delay10ms();if(key_3==0){while(key_3==0);     if(x==0){hour++;if(hour>23){hour=0;}}if(x==1){min++;if(min>59){min=0;}}if(x==2){sec++;if(sec>59){sec=0;}}   }}
}
void K4(){if(key_4==0){Delay10ms();if(key_4==0){while(key_4==0);  if(x==0){hour--;if(hour<0){hour=23;}}if(x==1){min--;if(min<0){min=59;}}if(x==2){sec--;if(sec<0){sec=59;}}}}
}void ledshow(){num[0]=number[hour/10];num[1]=number[hour%10];num[2]=~number[10];num[3]=number[min/10];num[4]=number[min%10];num[5]=~number[10];num[6]=number[sec/10];num[7]=number[sec%10];
}void Delay10ms()       //@11.0592MHz
{unsigned char i, j;i = 18;j = 235;do{while (--j);} while (--i);
}
void Delay2080us()      //@11.0592MHz
{unsigned char i, j;i = 4;j = 183;do{while (--j);} while (--i);
}void BBBBBBBB() interrupt 1{static char i=0;TL0 = 0x18;      //??????TH0 = 0xC4;        //??????P0=0;P2=~wei[i];P0=~num[i];i++;if(i>7){i=0;}
}
void AAAAAAAA() interrupt 3{static unsigned int n=0;TL1 = 0x00;       //??????TH1 = 0xF7;        //??????n++;if(n==398){n=0;sec++;if(sec>=60){sec=0;min++;if(min>=60){min=0;hour++; if(hour>=24){hour=0;}}}}
}

基于51单片机的8位数码管显示的可调时电子时钟相关推荐

  1. 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真

    基于51单片机的74HC164驱动数码管显示程序与仿真 基于51单片机的74HC164驱动一位数码管显示程序与仿真 #include #include #define uchar unsigned c ...

  2. 单片机8位数码管时钟c语言汇编,基于8051单片机和DS12C8878位数码管显示的时钟.docx...

    基于8051单片机和DS12C8878位数码管显示的时钟 #include #include #define sec XBYTE[0xed00]//秒寄存器地址 #define min XBYTE[0 ...

  3. c51时钟数码管显示流程图_基于51单片机的8位数码管电子时钟仿真图及源代码详细资料概述...

    描述 利用8位数码管显示时间,原理与4位数码管显示的基本一样 仿真图: 程序源代码: 本程序已经通过在线软件仿真和硬件制作. org 0000h ;程序开始入口地址 sjmp main ;跳转至主程序 ...

  4. 基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测并显示当前温度,并通过四位数码管显示 2.超过设定阈值,蜂鸣器将报警,同时控制相应继电器实现降温或者加热 3.系统具备三个功能按键,可 ...

  5. 基于51单片机实现4位数码管动态显示

    单片机入门学习记录(一) 硬件配置: 主控:STC89C52单片机 显示器件:四位一体数码管 操作器件:点动式独立按键SB1.SB2.SB3.SB4 *选配器件:蜂鸣器 功能要求: 1)开机自检:四位 ...

  6. 基于51单片机及DS18B20温度传感器数码管显示程序

    #include<reg52.h> #include<intrins.h> sbit DQ=P1^4;//温度采集 sbit latch1=P2^2;//段锁存 sbit la ...

  7. 基于51单片机温湿度报警器设计数码管显示实训开发

    视频演示:https://www.bilibili.com/video/BV1QV411s7rr/ 功能说明: 打开仿真后数码管会显示测量出来的温湿度值. 程序一直会显示检测结果. 默认报警开关是关闭 ...

  8. 基于51单片机的可由按键切换12\24小时制的电子时钟proteus仿真

    仿真电路图: 部分源代码: #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit lcd ...

  9. 单片机动态从00到99C语言,用51单片机控制 2位数码管动态显示 00 ~ 99

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

最新文章

  1. 【ZooKeeper Notes 14】数据模型
  2. html 表格自动计算,HTML表格中的JavaScript计算
  3. 使用sqlmap 绕过防火墙进行注入测试
  4. matlab画图(复数的直角坐标和极坐标)(-)
  5. httpclient 调取接口_HttpClient调用接口发送文件
  6. [LeetCode] Valid Anagram - 字符串排序比较系列
  7. iOS之深入解析Runloop的底层原理
  8. Fikker反向代理服务器的网站缓存加速/网站加速基础教程
  9. 小米笔记本写代码真香,包邮送一台!
  10. 面霸篇:MQ 的 5 大关键问题详解
  11. python对二维数组统计某一行的去重计数_Python数据分析笔记——Numpy、Pandas库
  12. python高段编程_25个有用的 Python 代码段
  13. SiteMesh配置下载使用(简单介绍)
  14. 【元胞自动机】基于matlab元胞自动机城市规划【含Matlab源码 125期】
  15. 计算机u盘打不开怎么办,电脑*u盘打不开怎么办
  16. wine 安装(ubuntu中安装windows下软件)
  17. OpenGL | 设置视口glViewport 裁剪glScissor 屏幕截图 glReadPixel
  18. 微信小程序详细图文讲解
  19. 【IT项目管理】第七章课后习题
  20. critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2

热门文章

  1. 71道经典Android面试题和答案,重要知识点都包含了
  2. win10网络连接的错误问题的解决方案
  3. Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
  4. 【智能制造】智能生产:智能制造的主线
  5. 转本结束暑假2022.6.29-7.13我的深圳之行(体验)
  6. dnsmasq的安装和配置(dns)
  7. 大盘再次开启超跌模式
  8. MindMap软件介绍
  9. NOIP模拟 洛阳怀(质因数分解)
  10. 如何实现高效的团队合作?