#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. 【JavaScript总结】JavaScript发展与学习内容
  2. C#正则表达式整理备忘
  3. NYOJ 451(组合数+全错位)
  4. this的用法添加样式给tr或者div
  5. 佳能打印机ip90 64位系统的驱动_佳能打印机如何安装 佳能打印机漏墨如何解决【详解】...
  6. 【学术杂谈】施一公:论文和科技实力是两回事,大家千万要分开
  7. 新能源汽车防撞预警系统FCW系统介绍
  8. 市场研究中的数据分析知识整理 (四)-主成分分析和因子分析
  9. 唱响艾泽拉斯_搞笑篇
  10. 上dnf一直连接服务器中,Win7系统下玩dnf提示正在连接服务器如何解决
  11. 谷歌推出 Translatotron 2,一种没有深度伪造潜力的语音到语音直接翻译神经模型
  12. 隐藏高德地图左下角LOGO
  13. java求六位数以内所有自幂数
  14. AjaxPro.dll 下载及使用
  15. GB2312转unicode
  16. 本地代码上传到gitlab
  17. Core Data详解
  18. 使用神经网络实现Logistic回归
  19. SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃
  20. linux运维工程师命令,Linux运维工程师的常用Linux命令汇总

热门文章

  1. Informix 9.4和CSDK的安装
  2. 行为型设计模式(2)—— 模板方法模式(Template Method Pattern)
  3. pojo类中的布尔类型的变量为什么不能加is
  4. 填写数独 洛谷P1784
  5. 【软件工程】第一次阅读作业
  6. 2018.12.26 作业
  7. Python实现bp神经网络识别MNIST数据集
  8. 查询数据库里所有表名和字段名的语句
  9. 十大经典排序算法(动图演示)(转)
  10. selenium-03-常用操作