用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。

用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。,第1张

你可以参考下面这个程序,这个是加计时器把对应端口改下,计时改减就可以了

数码管的显示网上大把,移植一下就可以了

//--------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中怎样设计简易秒表、秒表的三个按钮分别叫什么名字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10118780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存