#include

typedef unsigned int UINT  ;

typedef unsigned char UCHAR        ;

#define KEY P2

#define KEYMASK   0x07

sbit LE1 = P2^6;  //定义位控口

sbit LE2 = P2^7;  //定义段控口

UCHAR KeyPressDown = 0x00;

UCHAR KeyRelease = 0x00;

UCHAR LastKey = 0x00;

UCHAR MODE ;

extern UCHAR HH;

extern UCHAR MM;

extern UCHAR SS;

extern bit T_CYCLE  ;

extern void T0_Init(void);        //初始化定时器,函数定义在Timer.c

UCHAR code NUM[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(UINT t) //延时t时钟周期

{

while (t--)        ;

}

void H_Increase(void)        //小时增1

{

if(HH<23) HH++;

else

{

HH = 0;

}

}

void M_Increase(void)  //分钟增1

{

if(MM<59) MM++;

else

{

MM = 0;

H_Increase();

}

}

void S_Increase(void)  //秒增1

{

if(SS<59) SS++;

else

{

SS = 0;

M_Increase();

}

}

void display(UCHAR SEG,UCHAR Digi) //显示一位数码管,SEG = 0-9数字,Digi = 第0-6位

{

LE2 = 1;

P0 = (0x01<

LE2 = 0;

P0 = 0x00;

LE1 = 1;

P0 = NUM[SEG];

if (Digi==1||Digi==3) P0 &= 0x7f        ;  //显示分隔符

delay(50);

P0 = 0xff;

LE1 = 0;

}

void main(void)

{

P0 = 0xff;

LE1 = 0;

LE2 = 0;

T0_Init();

while(1)

{

if(MODE != 1 || T_CYCLE)

{

display(HH/10,0);  //显示小时十位数

display(HH%10,1);  //显示小时个位数

}

if(MODE != 2  || T_CYCLE)

{

display(MM/10,2);  //显示分钟十位数

display(MM%10,3);  //显示分钟个位数

}

display(SS/10,4);  //显示秒十位数

display(SS%10,5);  //显示秒个位数

}

}

void key_Process(void)                 //按键处理程序

{

UCHAR CurrKey;

KEY |= KEYMASK;  //将按键对应的IO设置为输入状态

CurrKey = (~KEY) & KEYMASK;

KeyPressDown = (~LastKey) & CurrKey;

KeyRelease = LastKey & (~CurrKey);

LastKey = CurrKey;

switch(KeyRelease)

{

case 1:

if(MODE == 2) MODE = 0;

else MODE ++;

break;

case 2:

if(MODE == 1) H_Increase() ;

if(MODE == 2) M_Increase() ;

break;

case 4:

SS = 0;

break;

default: break;

}

}

//Timer#include

typedef unsigned int UINT  ;

typedef unsigned char UCHAR        ;

UCHAR HH = 14;         //小时初始值

UCHAR MM = 2;         //分钟初始值

UCHAR SS = 55;         //秒初始值

UINT u_10ms  = 0; //10ms计数

bit T_CYCLE = 0;

extern void key_Process(void);

extern void S_Increase(void);

void T0_Init(void)

{

TMOD &= 0xf0;

TMOD |= 0x01;

//定时器赋初始值,定时时间为10ms。

TH0 = 0xd8;

TL0 = 0xf0;

TR0 = 1;

IE = 0x82;

}

void T0_INTSrv(void) interrupt 1

{

//定时器重新开始计时。

TH0 = 0xd8;

TL0 = 0xf0;

u_10ms ++;

if (u_10ms%20==0)        // 200 ms

{

T_CYCLE = !        T_CYCLE; //闪烁循环

}

if (u_10ms>99)        // 1000 ms = 1 second

{

u_10ms = 0;

S_Increase();

}

key_Process();        //SET按键处理

}

单片机数码管6位时钟c语言,单片机6位数码管时钟相关推荐

  1. c语言10以内位运算,C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  2. 数码管显示1到8c语言,单片机控制八只数码管滚动显示1~8 附PROTEUS软件仿真图

    数码管显示是每一个单片机初学者都必须学的,而单片机驱动数码管的数字循环显示实验,又是单片机基础中的基础,同时也是学好C语言编程的关键,此实验在硬件上可以弄清楚单片机驱动原理和数码管的显示原理,在软件上 ...

  3. 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...

    一.实验内容 采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数.按下开关10次,计算按键的平均时间,并通过数码管显示出来. 二.实验目的 了解定时器的各种工作方式 掌握定时器/计数器的使 ...

  4. 4位数码管中间的冒号c语言,单片机4位数码管电子时钟(带闹钟,冒号为秒闪烁)...

    经过几天的努力,第一个51单片机电子时钟终于出炉了,通过4位数码管来显示时间,系统晶振11.0592MHZ,仿真图中用二极管代替时钟冒号闪烁,非门代替三极管,让仿真速度与真实速度达到一致,本设计用了6 ...

  5. 单片机音乐播放器课程设计C语言,单片机课程设计简易音乐播放器

    单片机课程设计简易音乐播放器 论文题目:简易音乐播放器所属系部:电子工程系 指导教师: 学生姓名: 学 号: 专 业: 电子信息工程技术 题目: 简易音乐播放器任务与要求:本设计以 MCS-51 系列 ...

  6. 单片机无线模块编码和解码c语言,单片机编码 无线模块发送与接收 程序

    单片机编码 无线模块发送与接收 程序 模块型号,可在万能的某宝搜索[超再生无线模块] 接收距离:空旷200米[这是卖家说的,有待考验] 接收端在没有收到讯号,会生成间歇性尖状脉冲,data接LED负极 ...

  7. 单片机音乐播放器课程设计C语言,单片机音乐播放器课程设计中音乐代码怎么弄...

    单片机音乐播放器课程设计中音乐代码怎么弄 答案:2  信息版本:手机版 解决时间 2019-10-06 13:16 已解决 2019-10-06 02:07 单片机音乐播放器课程设计中音乐代码怎么弄 ...

  8. 单片机io口的控制实验c语言,单片机io口控制实验报告

    <单片机io口控制实验报告>由会员分享,可在线阅读,更多相关<单片机io口控制实验报告(5页珍藏版)>请在人人文库网上搜索. 1.单片机io口控制实验报告 精品文档,仅供参考单 ...

  9. C语言中的位运算和逻辑运算

    位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...

最新文章

  1. topcoder srm 691 div1 -3
  2. python:编写登陆接口(day 1)
  3. Linux Rootkit 系列四:对于系统调用挂钩方法的补充
  4. 解决SQL server2005数据库死锁的经验心得
  5. C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全
  6. 陈灯可重用代码段管理器(插件版最新版本:3.2;桌面版最新版本:2.3)
  7. hdu_1233(最小生成树)
  8. 使用amap-js引入高德地图AMap及其UI组件AMapUI
  9. Shell重定向的概念笔记
  10. Serverless 实战 —— Serverless + Egg.js 后台管理系统实战
  11. 高性能有限元计算服务器,结构有限元计算服务器配置
  12. 红旗linux挂载硬盘命令,红旗6sp1修改默认挂载的硬盘分区
  13. 【读书笔记】Java NIO (中文版) 读书笔记
  14. C# RSA在服务上使用出现拒绝方法错误的解决方法
  15. primefaces_Primefaces向导组件示例
  16. oracle的事物起始于,oracle 学习笔记(十) 事务控制语句
  17. js margin作用到父元素_子元素的 margin-top 传递给了父元素
  18. SAP 查询分析器的实现的3种方法
  19. 高通8926和高通410的参数对比
  20. 关于施耐德PLC下载程序错误出现“断言失败:‘Abort=Quit,Retry=Debug,lgnore=Continue’”

热门文章

  1. PBOC/EMV 中SDA和DDA简介
  2. 计算机勾兑双绝是谁发明,白酒行业最早何时实行白酒勾兑的?白酒勾兑的偏见又源于何时?...
  3. void *作为函数形参类型
  4. flash全屏显示代码
  5. Cramer-Rao下界
  6. java第四弹 多态 final static 代码块 抽象类 匿名类 接口 Java8新特性:接口增强
  7. 总结和创业从写自己的cms开始
  8. 文正机械电子工程专业课_机械电子工程专业解读_机械电子工程专业介绍_机械电子工程专业开设课程-高考圈...
  9. scrapy-爬取百度贴吧之物流内容。
  10. 计算机组成原理第一章课件,计算机组成原理第一章课件.ppt