单片机数码管6位时钟c语言,单片机6位数码管时钟
#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位数码管时钟相关推荐
- c语言10以内位运算,C语言基础知识--位运算
1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...
- 数码管显示1到8c语言,单片机控制八只数码管滚动显示1~8 附PROTEUS软件仿真图
数码管显示是每一个单片机初学者都必须学的,而单片机驱动数码管的数字循环显示实验,又是单片机基础中的基础,同时也是学好C语言编程的关键,此实验在硬件上可以弄清楚单片机驱动原理和数码管的显示原理,在软件上 ...
- 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...
一.实验内容 采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数.按下开关10次,计算按键的平均时间,并通过数码管显示出来. 二.实验目的 了解定时器的各种工作方式 掌握定时器/计数器的使 ...
- 4位数码管中间的冒号c语言,单片机4位数码管电子时钟(带闹钟,冒号为秒闪烁)...
经过几天的努力,第一个51单片机电子时钟终于出炉了,通过4位数码管来显示时间,系统晶振11.0592MHZ,仿真图中用二极管代替时钟冒号闪烁,非门代替三极管,让仿真速度与真实速度达到一致,本设计用了6 ...
- 单片机音乐播放器课程设计C语言,单片机课程设计简易音乐播放器
单片机课程设计简易音乐播放器 论文题目:简易音乐播放器所属系部:电子工程系 指导教师: 学生姓名: 学 号: 专 业: 电子信息工程技术 题目: 简易音乐播放器任务与要求:本设计以 MCS-51 系列 ...
- 单片机无线模块编码和解码c语言,单片机编码 无线模块发送与接收 程序
单片机编码 无线模块发送与接收 程序 模块型号,可在万能的某宝搜索[超再生无线模块] 接收距离:空旷200米[这是卖家说的,有待考验] 接收端在没有收到讯号,会生成间歇性尖状脉冲,data接LED负极 ...
- 单片机音乐播放器课程设计C语言,单片机音乐播放器课程设计中音乐代码怎么弄...
单片机音乐播放器课程设计中音乐代码怎么弄 答案:2 信息版本:手机版 解决时间 2019-10-06 13:16 已解决 2019-10-06 02:07 单片机音乐播放器课程设计中音乐代码怎么弄 ...
- 单片机io口的控制实验c语言,单片机io口控制实验报告
<单片机io口控制实验报告>由会员分享,可在线阅读,更多相关<单片机io口控制实验报告(5页珍藏版)>请在人人文库网上搜索. 1.单片机io口控制实验报告 精品文档,仅供参考单 ...
- C语言中的位运算和逻辑运算
位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...
最新文章
- topcoder srm 691 div1 -3
- python:编写登陆接口(day 1)
- Linux Rootkit 系列四:对于系统调用挂钩方法的补充
- 解决SQL server2005数据库死锁的经验心得
- C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全
- 陈灯可重用代码段管理器(插件版最新版本:3.2;桌面版最新版本:2.3)
- hdu_1233(最小生成树)
- 使用amap-js引入高德地图AMap及其UI组件AMapUI
- Shell重定向的概念笔记
- Serverless 实战 —— Serverless + Egg.js 后台管理系统实战
- 高性能有限元计算服务器,结构有限元计算服务器配置
- 红旗linux挂载硬盘命令,红旗6sp1修改默认挂载的硬盘分区
- 【读书笔记】Java NIO (中文版) 读书笔记
- C# RSA在服务上使用出现拒绝方法错误的解决方法
- primefaces_Primefaces向导组件示例
- oracle的事物起始于,oracle 学习笔记(十) 事务控制语句
- js margin作用到父元素_子元素的 margin-top 传递给了父元素
- SAP 查询分析器的实现的3种方法
- 高通8926和高通410的参数对比
- 关于施耐德PLC下载程序错误出现“断言失败:‘Abort=Quit,Retry=Debug,lgnore=Continue’”
热门文章
- PBOC/EMV 中SDA和DDA简介
- 计算机勾兑双绝是谁发明,白酒行业最早何时实行白酒勾兑的?白酒勾兑的偏见又源于何时?...
- void *作为函数形参类型
- flash全屏显示代码
- Cramer-Rao下界
- java第四弹 多态 final static 代码块 抽象类 匿名类 接口 Java8新特性:接口增强
- 总结和创业从写自己的cms开始
- 文正机械电子工程专业课_机械电子工程专业解读_机械电子工程专业介绍_机械电子工程专业开设课程-高考圈...
- scrapy-爬取百度贴吧之物流内容。
- 计算机组成原理第一章课件,计算机组成原理第一章课件.ppt