资讯详情

单片机简易秒表C51程序

本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到的原理图即可.这是一整个单片机的电路图其他的忽略.

以下是程序源代码: /** *项目:简易秒表 *设计任务书 *一、任务简介: *秒表是体育比赛常用计时工具。本设计要求利用现有的 *有限资源,设计具有储存多个比赛成绩功能的简易秒表, *并能利用查询历史成绩。 *二、设计要求: *⑴ 系统硬件设计: *利用 I-III.1型用户板完成设计要 求; *⑵ 系统软件设计: *完成控制软件的编写与调试; *⑶ 基本功能: *① 开机数码管显示0000; *按下1#键开始计时;再次按下1#键停止计时; *② 在停止状 态下, *按下3#键清除所有计时信息,数码管显示0000; *按下4#键启动定时器,返回从原处计时; *(4) 附加功能: *① 在计时状态下,连续按下3#键可以连续记录最多10个 运动员成绩, *按下1#键停止计时或者计满10次后自动停止时; *② 在停止状态下, *连续按下2#键可以查看刚才记录的10个成绩,数码管第 一位(0~9)显示运动员名 *次,数码管后3位显示运动员成绩; *(5) 提高功能: *① 按键时要求有短暂发音; **/ /** *功能:简易秒表 *作者:徐冉 *日期:2013-06-04-19:30-21:50 *备注:本程序已经顺利通过调试,并完美实现,耗时2小时20分钟; **/ /****************AT89C52-RC **************************/ /**********************51hei开发板**********************/ #include <reg52.h> #include <intrins.h> typedef unsigned int uint; typedef unsigned char uchar; sbit wela = P2^7; sbit dula = P2^6; sbit FM = P2^3; sbit s1 = P3^4; sbit s2 = P3^5 ; sbit s3 = P3^6; sbit s4 = P3^7;

uchar code table[] = { 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F //"9" }; //临时表,用于存放运动员的成绩 uint dis[10] = {0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uchar mge, m, num, counter; uint sec; //delay:xms void delay(uint xms) { uchar i, j; for(i = 0; i < xms; i++) for(j = 0; j < 125; j++); } //display:score void display(uchar mge, uint num) { uchar bai, shi, ge; bai = num / 100 % 10; shi = num / 10 % 10; ge = num % 10;

dula = 1; P0 = table[mge]; dula = 0; P0 = 0xff; wela = 1; P0 = 0xfe; wela = 0; P0 = 0x00; delay(1);

dula = 1; P0 = table[bai]; dula = 0; P0 = 0xff; wela = 1; P0 = 0xf7; wela = 0; P0 = 0x00; delay(1);

dula = 1; P0 = table[shi]; dula = 0; P0 = 0xff; wela = 1; P0 = 0xef; wela = 0; P0 = 0x00; delay(1);

dula = 1; P0 = table[ge]; dula = 0; P0 = 0xff; wela = 1; P0 = 0xdf; wela = 0; P0 = 0x00; delay(1); } //timer0:init void init() { TMOD = 0x01; TH0 = 0xB8; TL0 = 0x00; TR0 = 1; EA = 1; ET0 = 1; } //keyscan: void keyscan() { if(s1 == 0) { delay(5); if(s1 == 0) { FM = 0; TR0 = ~TR0; while(!s1); delay(2); while(!s1); FM = 1; } }

if(s2 == 0) { delay(5); if(s2 == 0) { FM = 0; if(TR0 == 0) { sec = dis[mge]; mge++; if(mge >= 10) { sec = 0; mge = 0; m = 0; } } while(!s2); delay(2); while(!s2); FM = 1; } }

if(s3 == 0) { delay(5); if(s3 == 0) { FM = 0; if(TR0 == 0) { sec = 0; mge = 0; m = 0; } else { dis[m] = sec; m++; if(m >= 10) { TR0 = 0; m = 0; } } while(!s3); delay(2); while(!s3); FM = 1; } }

if(s4 == 0) { delay(5); if(s4 == 0) { FM = 0; sec = dis[9]; TR0 = 1; while(!s4); delay(2); while(!s4); FM = 1; } } } //main: void main(void) { init(); while(1) { display(mge, sec); keyscan(); } } //timer0:int void timer_int() interrupt 1 { TH0 = 0xB8; TL0 = 0x00; counter++; if(counter == 50) { counter = 0; sec++; if(sec >= 999) { sec = 0; } } }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台