单片机智能秒表 ,怎么写程序啊?

作者&投稿:虞封 (若有异议请与网页底部的电邮联系)
单片机智能秒表程序设计~

不是很简单的程序吗?联系方式?

单片机中做延时,如果是时间比较短的情况,和单片机的机器周期时间,或单片机运行单个命令的时间是同一个单位时间的话,那么用循环运行一些没有动作的命令来延时,算每个命令的时间是多少,循环了多少次,那延时时间就可以算出来的了。
另外一种延时,时间相对机器周期的单位时间来说比较大,好像要MS,S 以上,那么可以用单片机的定时器来做,那就比较准确的时间的了,

include<reg52.h>
code char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
code char tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef};
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit beep=P1^7;
static unsigned char ms,sec,min;
static unsigned char Min[10],Sec[10],Ms[10];
static int i,j;
unsigned char flag;
void delay(unsigned int cnt)
{
while(--cnt);
}
void Beep()
{
unsigned char i;
for(i=0;i<250;i++)
{
beep=0;
delay(5);
beep=1;
delay(15);
}
}
void main()
{
unsigned char key3_flag=0,key4_flag=0;
TMOD|=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=0;
TMOD|=0x10;
TH1=0xf8;
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;
sec=0;
ms=0;
min=0;
P1=0xff;
i=0;
j=0;
start:
while(1)
{
if(!key1)
{
flag=0;
if(!key1)

delay(50);
if(!key1)
while(!key1)
{;}
TR0=!TR0;
}
if(!key2)
{
delay(50);
if(!key2)
{
while(!key2)
{;}
if(i==10)
{
TR0=0;
flag=1;
goto start;
}
else
flag=0;
Min[i]=min;
Sec[i]=sec;
Ms[i]=ms;
i++;
}
}
if(!key3)
{
flag=0;
delay(50);
if(!key3)
{
while(!key3)
{;}
TR0=0;
key3_flag=1;
if(j==i)
goto start;
else if(key4_flag)
j+=2;
key4_flag=0;
min=Min[j];
sec=Sec[j];
ms=Ms[j];
j++;
}
}
if(!key4)
{
flag=0;
delay(50);
if(!key4)
{
while(!key4)
{;}
TR0=0;
key4_flag=1;
if(j<0)
goto start;
else if(key3_flag)
j-=2;
key3_flag=0;
min=Min[j];
sec=Sec[j];
ms=Ms[j];
j--;
}
}
if(!key5)
{
flag=0;
delay(50);
if(!key5)
while(!key4)
{;}
TR0=0;
min=0;
ms=0;
sec=0;
for(i=0;i<10;i++)
{
Min[i]=0;
Sec[i]=0;
Ms[i]=0;
}
i=0;
}
while(flag)
{
Beep();
goto start;
}
}
}
void Timer1_isr(void) interrupt 3 using 0
{
static unsigned char num;
TH1=0xf8;
TL1=0xf0;
switch(num)
{
case 0:P2=0xfe;P0=tab[min/10];break;
case 1:P2=0xfd;P0=tab[min%10];break;
case 2:P2=0xfb;P0=tab[sec/10];break;
case 3:P2=0xf7;P0=tab1[sec%10];break;
case 4:P2=0xef;P0=tab[ms/10];break;
case 5:P2=0xdf;P0=tab[ms%10];break;
default:break;
}
num++;
if(num==6)
num=0;
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0xd8;
TL0=0xf0;
ms++;
if(ms==100)
{
ms=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
}
}
}

1.了解单片机硬件知识
2.了解单片机汇编指语言(可以直接汇编写代码,或用C51而汇编作为加深对硬件操作的理解必学)
3.懂C语言,了解单片机开发的C51与C的区别
4.至少要掌握一个单片机软件开发集成环境的使用(例如Keil uVision4)
5.明白电路图(可以是别人设计好的,有能力的可以自己设计电路图),至少要知道输入输出端口和接脚情况,外围电路中的设备要如何控制
6.了解要写的程序的具体功能需求
7.最后开始是写代码
可以在任意一款文本编辑中进行,可选择用汇编语言 或是C51 或是混合代码
如选C51,开头的部分都是和硬件相关的一些设定,几乎和逻辑无关的,
而后至少写一个主函数, ... 代码写完保存为.c
(后面还有编译、模拟调试运行、烧写到单片机上,这些已经超出怎么写,属于后话)
或许你只是做任务发这个问,我也是做任务,用心回答,希望得到采纳


岑溪市17737451276: 如何设计这个单片机数字秒表程序? -
牢怎肌苷: 根据以下程序稍做修改,就可以了 下面程序启动和暂停共用一个按键 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit key1=P1^0; sbit key2=P1^1; sbit wei1=P1^2;//四个个数码管的位驱动(阳极) sbit wei2=P1^3; ...

岑溪市17737451276: 单片机的秒表设计的程序 -
牢怎肌苷: 这个程序本身思路都已经非常清晰了呀,主要就是再把流程优化下即可了.定时器T0只负责产生秒信号,用两个计数单元来计数需要显示的内容,在低位秒信号满100后清零同时把高位单元加一,还有就是对按键的处理和显示的处理问题上,比如两个键同时按下如何处理,显示是用锁位来实现,还是不停的动态扫描实现等等

岑溪市17737451276: 用单片机的汇编语言编写一个(十秒秒表 的编程) -
牢怎肌苷: ;功能:0~9,数码管显示计时;共阳接法;P1口接数码管 ORG 0000H LJMP MAIN ORG 001BH ;定时器T1,中断入口 LJMP T1_ISR ORG 0030H;主程序MAIN: MOV TMOD,...

岑溪市17737451276: 单片机秒表,求大神设计个秒表....C语言程序 -
牢怎肌苷: 其实四位一体数码管显示电路的位控可直接用P2口控制,不必用锁存器74HC573,仿真图简单,写程序也简单.如下仿真图.

岑溪市17737451276: STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计 -
牢怎肌苷: STOP按下一次K++; if(CLEAR==0) {K=0;T=0;} 这个要写在计时器中断程序里 if(K==0)不计时 if(K==1)启动计时器开始计时 设计时时间为T if(K==2)计数器停止计时 这三行写在主程序死循环里再加上显示程序就可以了

岑溪市17737451276: 单片机的秒表编程是怎样做,...
牢怎肌苷: 要求不高的话用定时器做吧,把当前值给一个变量,就行了,这样就是不能存,要是能存的话就加一个24C01.

岑溪市17737451276: 帮帮忙吧,谁有单片机秒表的程序设计!急有!要求计时精度为百分之一秒,5键操作,难度很大,必有重谢! -
牢怎肌苷: 用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能.能用按键选择以上两功能之一. 三、程序代码: A_BIT EQU 20H ...

岑溪市17737451276: 你好,请教一下怎么用单片机知识、汇编语言设计一个秒表计时器,
牢怎肌苷: 这个程序对于初学者来说综合性比较高.由于程序比较长,就不一一写出了.首先你可以定义三个8位寄存器如R2,R3,R4作为计数的分,秒,百分之一秒为、十分之一秒位.程序初始化设置相应的定时器模式和外部中断方式,打开相应的中断.用定时器产生一个10ms的中断开始计数.用外部中断控制计时,你可以设置一个标志位,没按下一次按键,标志位取反,就能控制计数的继续和暂停.至于时间清零,就很简单了,判断某一管脚为1或0时,上面三个8位寄存器如R2,R3,R4全部清零就行了.

岑溪市17737451276: 怎样用汇编语言编写51单片机的秒表程序 -
牢怎肌苷: 呵呵,我大概给你说说吧,例如MOV指令,执行这条指令需要一个机器周期.DJNZ指令,执行这条指令需要2个机器周期.(一机器周期=1微秒).你要是用定时器工作的话需要先定义一下TMOD TH TL的数值 这个就用到晶振了了.要先看多少晶振,假如6MHZ,就用12除6,得出来的是2毫秒.在利用计算公式算出你需要的延时时间.(计算公式我没记住.呵呵,你可以在书上看看,应该有的)

岑溪市17737451276: 求单片机秒表程序、 -
牢怎肌苷: 秒表1/100秒显示单位,也就是10毫秒,用单片机的话你用定时器10毫秒中断一次就OK了,以下是部分程序,显示部分没做.second equ 30h ;存秒 sec100 equ 31h ;存1/100秒部分 org 0000h ljmp start org 000bh ljmp timer0 org 0100h start:...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网