51单片机码表c语言编程,分享自写码表单片机程序(共阴极数码管显示)
#include
#include
typedef unsigned int u16;
typedef unsigned char u8;
sbit seg_sel = P2^6;
sbit bit_sel = P2^7;
sbit start_key = P3^0;
sbit record_key = P3^1;
sbit reload_key = P3^2;
sbit reset_key = P3^3;
//共阴极数码管0-9和"-"编码0x40
unsigned char code seg_table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x40};
//数码管位码(数组第1位对应数码管最左位)
unsigned char code bit_table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
#define DATA P0
u8 timer;
//初始化显示数据
u8 TimeFormat[] = {0,0,1,0,0,1,0,0};
//数据记录数组,5组,每组8个数据
u8 ResultArray[5][8];
u8 ResultMax = 5;
u8 i,j,k,z;
unsigned long TotalMS;
u8 minS,minG,secS,secG,msS,msG;
bit IsReload;
void delay(u16 num)
{
u16 m,n;
for(m=num; m>0; m--)
for(n=113; n>0; n--);
}
//此函数将毫秒数转换成需要显示的时间格式(设置数组TimeFormat[])
void FormatTimeWithMS(long tms)
{
minS = (tms/60000)/10;
minG = (tms/60000)%10;
secS = (tms-(minS*10+minG)*60000)/1000/10;
secG = (tms-(minS*10+minG)*60000)/1000%10;
msS = (tms%1000)/100;
msG = (tms%1000)%100/10;
TimeFormat[0] = minS;
TimeFormat[1] = minG;
TimeFormat[3] = secS;
TimeFormat[4] = secG;
TimeFormat[6] = msS;
TimeFormat[7] = msG;
}
void TimeDisplay(void)
{
i = 0;
for (j=0; j<8; j++)
{
//移位
bit_sel = 1;
DATA = bit_table[j];
bit_sel = 0;
//显数
seg_sel = 1;
if ( i==2 | i==5 )
{
DATA = seg_table[10];
}else{
DATA = seg_table[TimeFormat[i]];
if (!IsReload)
{
DATA = seg_table[TimeFormat[i]];
}else{
DATA = seg_table[ResultArray[z][i]];
}
}
i++;
delay(1);
//消影
DATA = 0x00;
seg_sel = 0;
}
}
void StopTimer(void)
{
if(TR0){TR0=0;}
IsReload = 1;
TotalMS = 0;
FormatTimeWithMS(TotalMS);
}
void main(void)
{
DATA = 0x00;
P3 = 0xff;
seg_sel = 0;
bit_sel = 0;
TMOD = 0x01;
//单次溢出时间10ms之初值
TH0 = 0xdc;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TotalMS = 0;
while(1)
{
//计时启停
if (start_key == 0)
{
delay(10);
if (start_key == 0)
{
TR0 = ~TR0;
}
while(!start_key);
}
//记录时间
if (record_key == 0)
{
delay(10);
if (record_key == 0)
{
//小于最大记录时,记录数据;达到最大值时,停止计时器
if (k < ResultMax)
{
ResultArray[k][0] = minS;
ResultArray[k][1] = minG;
ResultArray[k][2] = 1;
ResultArray[k][3] = secS;
ResultArray[k][4] = secG;
ResultArray[k][5] = 1;
ResultArray[k][6] = msS;
ResultArray[k][7] = msG;
k++;
if (k==ResultMax) if(TR0){TR0=0;}
}
}
while(!record_key);
}
//回显被记录的时间
if (reload_key == 0)
{
delay(10);
if (reload_key == 0)
{
//如果不是回显数据,那么z=0(此处加判断的意义是首次点击回显键时,数据从第一组开始显示)
if(!IsReload)
{
z = 0;
}else{
z++;
if( z > (ResultMax-1)){z=0;}
}
StopTimer();
}
while(!reload_key);
}
//重置(计时器停止,总显示时间清0,时间记录数组清0,回显数据状态置0)
if (reset_key == 0)
{
delay(10);
if (reset_key == 0)
{
StopTimer();
memset(ResultArray,0,sizeof(ResultArray));
IsReload = 0;
}
while(!reset_key);
}
//显示时间
FormatTimeWithMS(TotalMS);
TimeDisplay();
}
}
void timer0_service(void) interrupt 1
{
TH0 = 0xdc;
TL0 = 0x00;
//因为是每10ms溢出一次,故总时间累加10ms。
TotalMS = TotalMS+10;
}
51单片机码表c语言编程,分享自写码表单片机程序(共阴极数码管显示)相关推荐
- 入门必做的51单片机实验2----》利用外部中断的方法来控制发光二极管和共阴极数码管显示十六进制的0到F
嘿!各位中午好! 我是肖肖的猪会飞 欢迎收看肖小猪频道 刚刚做了个单片机实验->ヽ( ̄ω ̄( ̄ω ̄")ゝ 分享一下 文章目录 前言 一,实验题目 二,程序 三,仿真效果 前言 此实验为 ...
- c语言程序不能运行,C语言编程,我写了一个程序,但不能运行.
首先把a.txt和b.txt读入链表,然后判断是否有相同,如果没有相同的就输到C.txt中. #include #include #include typedef struct 首先把a.txt和b. ...
- 单片机的c语言ppt,第9章-单片机的C语言编程.ppt
第9章-单片机的C语言编程.ppt 第9章单片机的C语言编程 9 1C51编程语言简介9 2C51的数据类型9 3数据的存储器类型和存储器模式9 4SFR 位变量 存储器和I O接口的定义9 5C51 ...
- 单灯闪烁c语言程序,51单片机,C语言编程,控制指示灯闪烁的频率
c51单片机,c语言编程,关于指示灯定时闪烁的. P1.0 P1.1 P1.2 P1.3上面各接有一个指示灯,P2.0接一个外接按键. 要求: 按一下按键P1.0以1Hz的频率闪烁 半周期为500ms ...
- 单片机c语言实验,单片机实验C语言编程.doc
单片机实验C语言编程.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...
- 8051单片机c语言编程模板,完美的8051单片机C语言编程模板.doc
完美的8051单片机C语言编程模板.doc <8051单片机C语言编程模板> [程序开始处的程序说明] /***************************************** ...
- 单片机c语言编程要点,第1章单片机的C语言编程_2015要点.ppt
第1章单片机的C语言编程_2015要点 1-* 第 1 章 结束!谢 谢! * * 1-* 三.对存储器和外接I/O口的绝对地址访问 例: #include #define com XBYTE[0x0 ...
- 《十天学会单片机和C语言编程》
<十天学会单片机和C语言编程> 大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程]. ...
- 支持c语言编程的单片机,单片机的C语言编程(标准版).pptx
单片机的C语言编程(标准版) 第03讲 单片机的C语言编程;1.1 C语言概述与最简单的C程序 ;1.1 C语言概述与最简单的C程序 ;二.C语言的程序结构;1.1.2 C语言与MCS-51单片机; ...
- c语言之判断电压最大值最小值,《单片机和C语言编程》..ppt
<单片机和C语言编程>..ppt 6.1.2 DAC0832芯片及其与单片机接口 DAC0832是使用非常普遍的8位D/A转换器,由于其片内有输入数据寄存器,故可以直接与单片机接口.DAC ...
最新文章
- Cygwin获取root权限
- mysql设置ssh连接_ssh修改连接数据库 将mysql改为sql连接
- 人脸识别(通过照片库区别人物)
- mysql的优化-添加环境变量启动服务
- MySQL 8下忘密码后重置密码的办法(MySQL5老方法不灵了)
- 2020,微服务会被取代么?
- CentOS 6.5使用本地光盘做yum源
- HashPasswordForStoringInConfigFile 已过时
- junit的命令行测试-Could not find class
- junper srx配置思路
- 某国内知名百货公司同城裸光纤/海外专线
- 用cisco服务器添加html,在接入服务器上配置基本 AAA
- excel如何深度隐藏sheet呢?
- 安装dhcp服务器虚拟2012,windows server 2012 dhcp服务器安装
- Linux中etc目录etc是什么单词的缩写
- iOS 5 故事板进阶(1)
- 极速下载!利用插件破解百度云限速
- EasyUI项目驱动学习
- ASP.NET 5 Target framework dnx451 and dnxcore50
- 2-2_Selecting_data_and_analysis_part1
热门文章
- 实验吧 天网管理系统writeup
- 我只会SQL,到底能不能找到工作?
- MySQL常规篇之增删改查(精选)
- 老中医给程序员的养生指北|开奖啦
- 4、基础理论-平衡软件项目的质量与时间、范围、成本
- Drcom校园网认证系列(一) 抓包
- bootstrap 按钮颜色 class=“btn btn-success“
- 「国有企业数字化转型」的60个典型案例
- 绑定小程序数据助手,查看小程序的统计数据-微信小程序开发-视频教程22
- Structure of a Google Docs document 谷歌文档的结构