#include

#include

unsigned char data dis_digit;

unsigned char key_s, key_v;

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳

//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00 共阴

unsigned char data dis_buf[6];

unsigned char data dis_index;

unsigned char hour,min,sec;

unsigned char sec100;

sbit K1 = P3^0;

sbit K2 = P3^1;

bit scan_key();

void proc_key();

void inc_sec();

void inc_min();

void inc_hour();

void display();

void delayms(unsigned char ms);

void main(void)

{

P1 = 0x00;

P2 = 0x00;

TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式

TH1 = 0xdc; // 11.0592MHZ

TH0 = 0xFC;

TL0 = 0x17;

hour = 12;

min = 00;

sec = 00;

sec100 = 0;

dis_buf[0] = dis_code[hour / 10]; // 时十位

dis_buf[1] = dis_code[hour % 10]; // 时个位

dis_buf[2] = dis_code[min / 10]; // 分十位

dis_buf[3] = dis_code[min % 10]; // 分个位

dis_buf[4] = dis_code[sec / 10]; // 秒十位

dis_buf[5] = dis_code[sec % 10]; // 秒个位

dis_digit = 0xfe;

dis_index = 0;

TCON = 0x01;

IE = 0x8a; // 使能timer0,1 中断

TR0 = 1;

TR1 = 1;

key_v = 0x03;

while(1)

{

if(scan_key())

{

delayms(10);

if(scan_key())

{

key_v = key_s;

proc_key();

}

}

}

}

bit scan_key()

{

key_s = 0x00;

key_s |= K2;

key_s <<= 1;

key_s |= K1;

return(key_s ^ key_v);

}

void proc_key()

{

EA = 0;

if((key_v & 0x01) == 0) // K1

{

inc_hour();

}

else if((key_v & 0x02) == 0) // K2

{

min++;

if(min > 59)

{

min = 0;

}

dis_buf[2] = dis_code[min / 10]; // 分十位

dis_buf[3] = dis_code[min % 10]; // 分个位

}

EA = 1;

}

void timer0() interrupt 1

// 定时器0中断服务程序, 用于数码管的动态扫描

// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,

// 选通P2.0口数码管

// dis_buf --- 显于缓冲区基地址

{

TH0 = 0xFC;

TL0 = 0x17;

P2 = 0xff; // 先关闭所有数码管

P1 = dis_buf[dis_index]; // 显示代码传送到P1口

P2 = dis_digit; //

dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管

dis_index++; //

dis_index &= 0x07; // 数码管全部扫描完一遍之后,再回到第一个开始下一次

}

void timer1() interrupt 3

{

TH1 = 0xdc; // TH1 = 0xdc 11.0592MHZ 默认12MHZ

TL1 = 0x00; // TL1 = 0

sec100++;

if(sec100 >= 100)

{

sec100 = 0;

inc_sec();

}

}

void inc_sec()

{

sec++;

if(sec > 59)

{

sec = 0;

inc_min();

}

dis_buf[4] = dis_code[sec / 10]; // 秒十位

dis_buf[5] = dis_code[sec % 10]; // 秒个位

}

void inc_min()

{

min++;

if(min > 59)

{

min = 0;

inc_hour();

}

dis_buf[2] = dis_cod

c语言程序 数字时钟的设计,数字时钟C语言设计相关推荐

  1. 可运行的C语言程序的拓展名,可运行的c语言程序的扩展名为什么?

    可运行的c语言程序的扩展名为".exe".c语言程序经过"编译程序"编译之后,生成一个后缀为".obj"的二进制文件:然后由"连接 ...

  2. 收音机c语言程序,基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)...

    基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)(任务书,开题报告,论文15000字) 摘要 在当今的社会时代中,信息的传输扮演着极其重要的地位.随着科学技术的不断发展与进步,人类的生 ...

  3. c语言0x前缀的作用,有趣的问题,C语言程序中,为什么十六进制数字以前缀0x开头呢?...

    C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制.不过这样常常会让数字看起来"过长",例如十进制的 255 使用二进制表示为 11111111,因此,在C语言程 ...

  4. 模糊控制洗衣机c语言程序,以洗衣机模糊控制为例的教学案例设计方法

    刘金琨 [摘要]为了突出智能控制教学发展需要,在教学方面需要加大对相关课程案例建设的研究.教师可以以洗衣机模糊控制为例,介绍模糊逻辑控制系统的设计步骤,并通过Matlab仿真分析来加以讲解,深化学生对 ...

  5. c语言程序设计基础课后习题答案,2011级C语言程序设计基础教程课后习题答案

    1.C 语言课后习题习题答案详解(11 级教材)第 1 章1.1 填空题1.1.1 应用程序 ONEFUNC.C 中只有一个函数,这个函数的名称是 _main .1.1.2 一个函数由_函数头 _和_ ...

  6. 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...

    书山有路勤为径 学海无涯苦作舟 一.思考题. 1.你如何向别人解释清楚什么是编程.什么是计算机语言? 2.什么是C语言? 二.解答题. 1.用C语言编写程序:求任意两个整数的和.如果是小数的话,要求输 ...

  7. 200个c语言程序(由简单到复杂),200个c语言程序(由简单到复杂)

    200个C语言程序(由简单到复杂)从简单到难的200来个经典C程序csdn上的不过那里要资源分,自己下了下来,放到论坛里.有需要的童鞋可以下载学习学习.第一部分 基础篇 001 第一个C程序 002 ...

  8. c语言程序中复合句用什么表示,c语言程序设计(包云)c第1章概述

    <c语言程序设计(包云)c第1章概述>由会员分享,可在线阅读,更多相关<c语言程序设计(包云)c第1章概述(50页珍藏版)>请在人人文库网上搜索. 1.c语言计算机编程,讲座: ...

  9. c语言程序设计基础教程 金艳,重庆理工大-C语言程序设计基础教程_习题答案(纪纲_金艳).doc...

    习题答案 第1章 填空题 应用程序ONEFUNC.C中只有一个函数,这个函数的名称是__main . 一个函数由__函数头__和__函数体__两部分组成. 在C语言中,输入操作是由库函数__scanf ...

  10. C需语言程序中的基本控制结构有哪些,C语言程序的基本控制结构1.ppt

    第三讲 C语言程序的 基本控制结构,参考书 <计算机程序设计基础>第三章 <C程序设计>第四章.第五章,本讲主要内容,结构化程序设计 if 语句 switch 语句 while ...

最新文章

  1. 使用CruiseControl.Net全面实现持续集成
  2. 四大组件之 Activity_任务和返回栈
  3. Java的jar文件安装成windows 服务
  4. 存储过程 psal emp.sal%type是什么意思
  5. SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法
  6. Hadoop之zookeeper快速安装
  7. C#_自动化测试 (四) 自动卸载软件
  8. vs C4996的错误解决方法
  9. 自学android编程教程,安卓编程入门教程 安卓编程如何自学
  10. GB18030字符编码格式和点阵字库
  11. 不删除文字聊天的微信清理工具,快速释放空间,Python 编写,附源码
  12. 数据结构Java第四版pdf_数据结构与抽象:Java语言描述(原书第4版) 中文pdf完整版[131MB]...
  13. lumia 1520Android刷机包,诺言基亚Lumia 1520官方体系破开格提升固件释出产
  14. 幼儿园数学目标_幼儿园数学活动目标的制定
  15. 手机工商银行怎么转账_工行手机银行可以转账吗
  16. jar包双击打不开或者闪退的解决办法
  17. Fastadmin 自带的导入Excel功能
  18. 虚拟机无法复制文件到windows
  19. 定解问题(一)| 通解与特解 + 适定性 | 偏微分方程(五)
  20. 哪有什么岁月静好,只是有人在替你负重前行。致敬消防员、医护工作者、平凡英雄,感恩有你们。

热门文章

  1. Chromium Embedded Framework中文文档 (SVN属性)
  2. Manjaro oh-my-zsh安装配置
  3. 503小组第三章编程作业
  4. 【记】接口自动化测试,完整入门篇
  5. JZOJ 1667【AHOI2009】中国象棋——dp
  6. 跨国际日期分界线的解决方法
  7. DirectShow程序运行过程简析
  8. 【C】malloc(0)问题
  9. 在线正则表达式可视化工具
  10. python动态创建字典_如何在Python中创建动态命名字典?