求单片机秒表程序(用DP-51PROC调试)记录多个运动员的成绩。本设计用于记录多次时间。

求单片机秒表程序(用DP-51PROC调试)记录多个运动员的成绩。本设计用于记录多次时间。,第1张

DP-51PROC MCU貌似用的是51单片机吧???

这个是以前写的程序了,貌似可以满足你的要求。 引脚你看你喊改的怎么改吧。。。。。

源代码:(MCU:AT89S52编译环境:Keil uVision4)

#include<reg52.h>

#define W P2 //数码管位选

#define D P1//数码管段选

#define uchar unsigned char

#define TH (65363-10000)/256 //定时器中断初始值

#define TL (65363-10000)%256

uchar display[] = { 0xfc , 0x60 ,0xda , 0xf2 ,0x66 ,0xb6 , 0xbe , 0xe0 , 0xfe , 0xf6 } //数码管0~9数字的代码

int s[3],count=0,k=0

void xian() //数码管显示

void delay(int)//延迟

void main()

{

IE=0x83 //中断设定

TCON=0x01

TMOD=0x01

//中断开了两个,一个是定时器的,还有一个是外部中断,用于暂停,方式是负边缘扫描郑镇判

TH0=TH //定时器载入初始值

TL0=TL

TR0=1 //定时器中断开

while(1)

xian()

}

void xian()

{

W=0xfe //显示第一位

D=display[s[0]]

delay(1)

D=0x00

W=0xfd //显示第二位

D=(display[s[1]])|0x01 //后面的0x01是那个小数点

delay(1)

D=0x00

W=0xfb //显示第三位

D=display[s[2]]

delay(1)

D=0x00

}

void delay(int x)//延迟函数

{

int i,j

for(i=0i<xi++)

for(j=0j<120j++)

}

void my_T0(void) interrupt 1 //定时器中断函数

{

TH0=TH //载入初值

TL0=TL

if(!k)

if(++count==10) //每10次记一次数

{

count=0

s[0]+=1

if(s[0]==10)

{

s[1]++

s[0]=0

}

if(s[1]==10)

{

s[2]++

s[1]=0

}

if(s[2]==10)

{

s[0]=0

s[1]=0

s[2]=0

}

}

}

void my_TH0(void) interrupt 0 //外部中断0

{

k=1-k

}

这个就是秒表了。。。。。

另外说明一下:其中暂停是用的外部中断0,清零其实可以直接用复位键。

另外这个秒表实际上并不太精确,根据每人晶振的不同,定时器的初值还要进行改动。。。。

我不清楚DP-51PROC 里面的引脚是怎么分布的,你就研旅腔究一下改改这个程序吧。

ROM的任务是存储程序,就是单片机执行的指令,所以叫做“程序存储器”;当然也可以存储数据,比如显示汉字使用的字模数据。对于RAM,在单片机总只是临时存储运算过程中产生的中间数据,所以RAM叫做“数据存储器”。

你还犯了个错:寄存器就等于RAM吗?二者是完全不同的概念,尽管有的寄存器可以当作RAM使用,但是寄存器的功能不是为了存储数据使用的。

ROM中的内容在断电之后不会丢失,RAM在复位或者断电之后数据就全没了。

对于补充问题的回答:ROM中的程序“不可变”是什么意思?就是ROM中的程序在执行时所实现的功能不能改变ROM的内容,或者说就是不能改变程序自身的结构——否则就不需要你自己写程序了,或者程序会混乱的不可收拾。最典型的例子就是AVR单片机的应用程序含颂春中(不包括Bootloader程序)中是禁止出现SPM指令的,在AVR单片机中SPM指令的作用就能改变ROM的内容,所以在单片机在执行指令时都会避开SPM指令。

但是在使用编程器或者下载线对单片机ROM中的程樱逗序改写时,那是外部因素造成的改变,而不是单片机内部ROM中谈耐程序做到的。 而在RAM中存储的内容,是可以被程序改变的,还有EEPROM也和RAM一样。

所以要明白“不可变”的含义,打比方说就是你在车内能把车掀翻吗?只有在车外才能做到!

“还有单片机rom出场时候给他写了一个程序,那个程序是不可更改的,我以前是这样理解的啊!!!”——你说的这类单片机是属于一次性编程的OTP ROM或者EPROM的单片机,这在PIC的低端单片机中使用的很多,是为了降低成本。这种单片机适合使用在批量生产的产品中,只要程序一写进单片机,那就不同再通过编程器之类的设备来改变了。

查找最大值的程序,不是很简单的胡告吗?

如下即可:

ORG 0H

MOV R0, #30H

ACALL ZI

SJMP $

-----------------------------------

ZI:

MOV B, #0 先用0当做最大值.

MOV R7, #16比较16次.

LOOP: MOV A, @R0 取来一个数升州字.

CJNE A, B, B1 比较.

B1: JC B2 有借位转移吵做蔽.

MOV B, A 够减则存到B中.

B2: INC R0 转到下一个.

DJNZ R7, LOOP 循环16遍.

RET

-----------------------------------

END


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

原文地址: http://outofmemory.cn/yw/12462889.html

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

发表评论

登录后才能评论

评论列表(0条)

保存