你可以参考下面这个程序,这个是加计时器把对应端口改下,计时改减就可以了
数码管的显示网上大把,移植一下就可以了
//--------LCD 1601 clock----------------------------------------
//---modified from a LCD1602 program,2012/11/21-----------------
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
//----P3: key input for modify timer ---------------------------
#define KEY_IO P3
#define LCD_IO P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
//----P12: timer speaker output-------------------------------
sbit SPK = P1^2;
//----P24: timer LED indicator output------------------------
sbit LED = P2^4;
bit new_s, modify = 0;
char t0, sec = 50, min = 59, hour = 23;
//char code LCD_line1[] = "Designed by ZELD";
char code LCD_line2[] = "Timer: 00:00:00 ";
char Timer_buf[] = "23:59:50";
//---------------------------------------------------
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--) for(y = 100; y > 0; y--);
}
//---------------------------------------------------
void W_LCD_Com(uchar com) //写指令
{
LCD_RS = 0; LCD_IO = com; // LCD_RS和R/W都为低电平时,写入指令
LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲
}
//---------------------------------------------------
void W_LCD_Dat(uchar dat) //写数据
{
LCD_RS = 1; LCD_IO = dat; // LCD_RS为高、R/W为低时,写入数据
LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲
}
//---------------------------------------------------
void W_LCD_STR(uchar s) //写字符串
{
while(s) W_LCD_Dat(s++);
}
//---------------------------------------------------
void W_BUFF(void) //填写显示缓冲区
{
Timer_buf[7] = sec % 10 + 48; Timer_buf[6] = sec / 10 + 48;
Timer_buf[4] = min % 10 + 48; Timer_buf[3] = min / 10 + 48;
Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;
// W_LCD_Com(0xc0 + 7); W_LCD_STR(Timer_buf);
//1602 start from address C0H(second row),1601 start from 40H-------
W_LCD_Com(0x80 + 7); W_LCD_STR(Timer_buf);
}
//---------------------------------------------------
uchar read_key(void)
{
uchar x1, x2;
KEY_IO = 255;
x1 = KEY_IO;
if (x1 != 255) {
delay(100);
x2 = KEY_IO;
if (x1 != x2) return 255;
while(x2 != 255) x2 = KEY_IO;
if (x1 == 0x7f) return 0;
else if (x1 == 0xbf) return 1;
else if (x1 == 0xdf) return 2;
else if (x1 == 0xef) return 3;
else if (x1 == 0xf7) return 4;
}
return 255;
}
//---------------------------------------------------
void Init()
{
LCD_RW = 0;
W_LCD_Com(0x38); delay(50);
W_LCD_Com(0x0c);
W_LCD_Com(0x06);
W_LCD_Com(0x01);
// W_LCD_Com(0x80); W_LCD_STR(LCD_line1);
// W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);
W_LCD_Com(0x80); W_LCD_STR(LCD_line2);
TMOD = 0x01; //T0定时方式1
TH0 = 0x4c;
TR0 = 1; //启动T0
PT0 = 1; //高优先级, 以保证定时精度
ET0 = 1;
EA = 1;
}
//---------------------------------------------------
void main()
{
uint i, j;
uchar Key;
Init();
while(1) {
//-------------------------------
if (new_s) { //如果出现了新的一秒, 修改时间
new_s = 0; sec++; sec %= 60;
if(!sec) { min++; min %= 60;
if(!min) { hour++; hour %= 24;}
}
W_BUFF(); //写显示
//-------------------------------
if (!sec && !min) { //整点报时
for (i = 0; i < 200; i++) {
SPK = 0; for (j = 0; j < 100; j++);
SPK = 1; for (j = 0; j < 100; j++);
} }
}
//-------------------------------
Key = read_key(); //读出按键
switch(Key) { //分别处理四个按键
case 0: modify = 1; break;
case 1: if(modify) {min++; min %= 60; W_BUFF(); break;}
case 2: if(modify) {hour++; hour %= 24; W_BUFF(); break;}
case 3: modify = 0; break;
} }
}
//---------------------------------------------------
void timer0(void) interrupt 1 //T0中断函数, 50ms执行一次
{
TH0 = 0x4c;
t0++; t0 %= 20; //20, 一秒钟
if(t0 == 0) {new_s = 1; LED = ~LED;}
if(modify) LED = 0;
}
//===================================================
简介:计时器小程序——秒表计时器,程序界面简洁,只有一个时间显示区域和两个按钮,一个按钮是开始/暂停,另一个按钮是停止。
1功能:
(1)根据用户设置按01秒或1秒为最小单位计时,满60秒进为分钟,最大单位是分钟。
默认分钟为两位,超过两位后自动变为三位分钟。
(2)显示格式为
1最小计时单位为01秒时,显示为:分钟:秒:01秒。例如:02:07:5
2最小计时单位为1秒时,显示为:分钟:秒。例如:02:07
2 *** 作步骤
(1)按开始按钮,开始计时,此时开始按钮变为暂停按钮
(2)按暂停按钮,暂停计时,显示当前的计时时间
(3)按停止按钮,停止计时,暂停按钮恢复为开始按钮,时间显示为:00:00:00
(4)按menu键d出menu菜单,第一项为设置计时单位,含有子菜单,可以设置计时单位为1秒或者为
Android实现秒表计时器的程序设计 - 蓝蓝的天 - 博客频道 - CSDNNET
>
尊敬的楼主您好,对于您的问题答案为:开始,继续,暂停。再送您一些相关知识:在表正上方有一表把,上有一按钮。旋动按钮,上紧发条,这是秒表走动的动力。用大拇指控下按钮,秒表开始计时;再按下按钮,秒表停止走动,进行读数;再按一次,秒表回零,准备下一次计时。(注意:使用这类秒表一定要完成这一程序后才能进行下一次计时。这类表不能在按停后又重新开动秒表连续计时。为了解决这一问题,有的秒表在表把左侧装有一按钮,当表走动时将此按钮向上推,表停走;向下推,即继续累计计时。)
秒表的精度一般在0.1-0.2秒,计时误差主要是开表、停表不准造成的。秒表在使用前上发条时不宜上得过紧,以免断裂。使用完后应将表开动,使发条完全放开。不同型号的秒表,分针和秒针旋转一周所计的时间可能不同,使用时要注意。
使用秒表的注意事项:
1使用前先上紧发条,但不要过紧,以免损坏发条;
2按表时不要用力过猛,以防损坏机件;
3回表后,如秒针不指零,应记下其数值(零点读 书),试验后从测量值中将其减去(注意符号);
4要特别注意防止摔破秒表,不使用时一定将表放 在实验后中央的盒中
最后感谢您的提问,祝您有个好心情,再会!
以上就是关于用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。全部的内容,包括:用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。、android中怎样设计简易秒表、秒表的三个按钮分别叫什么名字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)