用51单片机设计一个秒表。主要要求: 1.用单片机的定时/计数器实现一个
我觉得你不会,你还好嚣张的,直接就列出来,你要干嘛,你这像是请求别人回答问题吗,还不给分,你意思一下也可以啊,幸亏我做过,我程序摆在这,你修改下咯,希望对你有用
;=====================================================
;=====程序名称:中断方式0到255一秒加计数==============
;=====硬件说明:利用P2口接片选,P1口送数据============
;=====软件说明:采用定时器0,软启动,定时功能工作方式1
;============= 定时时间为50MS,加数时间为一秒========
;=====程序编辑时间:2010-12-05-11-15==================
;=====程序编辑人:X--MAN==============================
;=====所用芯片:STC89C52==============================
;=====所用晶振:12MHz=================================
;=====版本:V1.0======================================
;=====当前进度:已完成================================
;=====程序完成时间:2010-12-13-11-20==================
;=====================================================
;=====分配单元地址====================================
COUNT1 EQU 31H ;计数寄存器
;=====程序起始地址====================================
ORG 0000H ;程序起始地址
JMP RESET
ORG 000BH ;定时器0
AJMP T0_SER ;中断服务程序
ORG 0030H ;执行程序的起始地址
;========================================================
;=============复位程序===================================
RESET:
MOV 30H,#00H
MOV 31H,#00H
MOV TMOD,#01H
MOV DPTR,#65536-50000 ;定时器赋初值;这是一种蛮好的赋初值的方法
MOV TH0,DPH
MOV TL0,DPL
SETB ET0 ;开分中段
SETB EA ;开总中断
SETB TR0 ;启动T0
;============主程序======================================
MAIN:
MOV DPTR,#TAB ;查表头
MOV A,30H ;赋值
MOV B,#100 ;百位处理
DIV AB
MOVC A,@A+DPTR ;查表地址
MOV P1,A ;送数据
CLR P2.0 ;片选
SETB P2.1
SETB P2.2
CALL DELAY ;延时
MOV P1,#00H ;清屏
MOV A,B ;十位处理
MOV B,#10
DIV AB
MOV DPTR,#TAB ;查表头
MOVC A,@A+DPTR
MOV P1,A ;送数据
SETB P2.0 ;片选
CLR P2.1
SETB P2.2
CALL DELAY ;延时
MOV P1,#00H ;清屏
MOV A,B ;各位处理
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
SETB P2.0
SETB P2.1
CLR P2.2
CALL DELAY
MOV P1,#00H
JMP MAIN
;=============中断服务程序======================
T0_SER:
MOV DPTR,#65536-50000 ;重新赋值
MOV TH0,DPH
MOV TL0,DPL
PUSH PSW ;现场保护
PUSH ACC
INC COUNT1 ;计数是否够一秒
MOV A,COUNT1
CJNE A,#20,T0_RETI
MOV COUNT1,#00H
INC 30H ;每隔一秒加1
T0_RETI:
POP PSW ;出栈保护
POP ACC
RETI ;中断返回
;==============延时程序=========================
DELAY:
MOV R7,#0FFH
D1:
MOV R6,#0FH
DJNZ R6,$
DJNZ R7,D1
RET
;==============表===============================
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;==============结束=============================
END
将单片机的两个定时器设置成:一个定时器模式,一个计数器模式,在定时时间之内检查计数器的脉冲个数就可以计算出频率大小了。
KEYVAL EQU 30H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
SEC1 EQU 79H
SEC2 EQU 7AH
DOT BIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR ;50ms定时
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2 ;启动
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3 ;暂停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP ;清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB: DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H
DB 0EEH ;"A" 0AH
DB 3EH ;"B" 0BH
DB 9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH
DB 00H ;" " 10H
END
51单片机最小系统怎么设计?
1、时钟电路51 单片机上的时钟管脚:XTAL1(19 脚) :芯片内部振荡电路输入端。XTAL2(18 脚) :芯片内部振荡电路输出端。2、复位电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。MCS-5l 系列单片机的复位引脚RST( 第9 管脚) 出现2个...
基于51单片机的计算器设计
在方案抉择中,我们对比了FPGA与AT89S52,最终AT89S52以其较低的成本和出色的实用性,成为我们首选的单片机平台。它以其8位微控制器和8k Flash存储器,256字节RAM等特性,为计算器设计提供了理想的嵌入式解决方案。第三章:硬核硬件,构建智能基石 核心硬件由AT89S52作为核心,辅以必要的供电(VCC、GND)和...
求51单片机电子时钟设计。用6个数码管显示出时分秒。
#16 RET DISPLAY: CALLCOUNTER MOVR0, #DISBUF MOVR1, #0 DISPLOOP: MOVDPTR, #LEDCODE MOVATR MOVLEDDATA, A MOVDPTR, #LEDPOSIT MOVA, R1 MOVCA, @A+DPTR MOVLEDSEG, A CALLDELAY MOVLEDSEG, #0FFH INCR0 INCR1 CJNER1, #8, DISPLOOP MOVR0...
用51单片机写一个程序:用定时中断T0T1控制4个数码管显示1...
define LS164_DATA(x) {if((x))P0_4=1;else P0_4=0;} define LS164_CLK(x) {if((x))P0_5=1;else P0_5=0;} define SEG_PORT P0 unsigned char Timer0IRQEvent=0;unsigned char Time1SecEvent=0;unsigned int TimeCount=0;unsigned char SegCurPosition=0;code...
51单片机设计一个程序:按键每按一次,数码管加1;当数码管加到9后又...
include<reg51.h> sbit k1=P3^3;define uint16 unsigned int define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if...
51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
ORG000BH LJMPT0INT ORG001BH LJMPT1INT LEDDEQU30H LEDCEQU 36H SECCEQU 37H TCNTEQU 3AH ORG 0030H ;--- TABLE: ; 共阴极数码管显示代码表 DB 0FCH;"0"00H DB 60H;"1"01H DB 0DAH;"2"02H DB 0F2H;"3"03H DB 66H;"4"04H DB 0B6H;"5"05H DB 0BEH;"6"06H DB ...
51单片机,利用0和1两个数字组成16种模式,并用四个开关控制数码显示一...
以下是使用51单片机(如STC89C52)和4个开关来控制数码管显示一位密码的简单示例代码。假设使用的是共阴数码管,并且数码管的引脚连接到了单片机的P0口。include <reg52.h> \/\/ 引入单片机寄存器定义头文件\/\/ 数码管显示的密码模式,共16种,每种模式使用4位二进制表示unsigned char password[16] = { ...
我为51单片机设计了一个用独立按键控制LED的程序,求大神看看程序有没有...
include<reg51.h>#include<intrins.h>sbit k1=P3^1;sbit k2=P3^0;sbit k3=P3^2;sbit k4=P3^3;bit flag=0;typedef unsigned char u8;typedef unsigned int u16;#define led P2void delay(u16 i){while(i--);}\/\/延时函数u8 keyscan(void){u8 keyval=0;if(k1==0){while(k1==0);...
设计一个由51单片机控制的一到五秒的程序延时程序!再加个数码管显示延时...
include <reg51.h> \/\/调用51单片机的头文件 define uchar unsigned char define uint unsigned int unsigned char code LED[]= { \/\/定义表格一定要使用code,这样会做到程序存储区中 0x3F, \/\/"0"的字形表,0B00111111 0x06, \/\/"1"的字形表,0B00000110 0x5B, \/\/"2"的字形...
利用51单片机设计一个秒表 (一定要按要求做到0.01秒)
最低位,是0.01s 变化一次,一秒钟,变化 100 次。这么快,人的眼睛,分辨不出来。只能看到一个 8。停止时,才能看到稳定的数字。程序如下:include<reg52.h> sbit P3_5 =P3^5;unsigned char counet, m[4] = {0,0,0,0};void display(){ unsigned char code Tab[] = { 0xc0,0xf9,...
中叔福金帅: 遇到懒学生了,这个不就是一个定时器加显示吗,有什么难的,自己翻翻微机原理书就可以做 了,也就四五十行汇编语言就行了,用C就更加简单,具体的方法:用定时器定时0.2ms,定时到了就给固定的一个变量加1,然后判断这个变量是不是到了500,到了就清零然后把秒的变量加1,就是1s了,(分和时也是如此,秒为60,秒清零,分加1);主程序就只管显示和按键,按键随便用中断还是查询,我建议你查询,因为程序简单,显示程序就是查个表,自己把数码显示的断码表编好就可以了,把秒的数值查表对应显示,完了就查询按键,按键累加,值为0是没按,1是按1次,2是按2次,3是按3次,同时清零,很简单的
正定县15294786859: 51单片机完成简易秒表的设计 - ?
中叔福金帅: 设计思路:1.定时器计时 设置秒表最小单位(如ms)设置定时器的寄存器初始值,定时器溢出显示等.2.键盘扫描 可设置中断也可直接键盘扫描,因键较少可以不必接成矩阵.可以只用三个键来实现. 键1:功能选择,包括功能设置、准备计时等 键2:计时开始,向上调整时间 键3:计时停止,向下调整时间3.显示 看单片机引脚多少,可以直接静态显示,可以用移位寄存器增加管脚功能.
正定县15294786859: 用51单片机制作倒计时秒表需要什么元件,麻烦列个清单.新手刚刚开始学 - ?
中叔福金帅: 至少需要:1、单片机--12、30p电容--23、12M晶振--14、10u电容--15、8.2K电阻--16、按钮开关--17、数码管组--1(4个数码管)8、8电阻排--19、辅料(导线、焊锡等)
正定县15294786859: 单片机秒表功能设计 - ?
中叔福金帅: 采用51的单片机即可实现.用定时器计时,每秒进位,输出到LED数码管上显示即可.利用一个外部中断,按键决定何时显示秒和分(也可在LED上同时显示分和秒).
正定县15294786859: 51单片机秒表设计,高手请进 - ?
中叔福金帅: 用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能.能用按键选择以上两功能之一.nbsp;三、程序代码:nbsp;A_...
正定县15294786859: 用51单片机做一个电子秒表,要求能够多次计时,能够查询计时时间,我需要单片机程序和仿真电路图,谢谢 - ?
中叔福金帅: 用单片机内部计时器和数码管即可完成.单片机问题或许我可帮助.
正定县15294786859: 利用51单片机,5个数码管设计一个秒表,要求在数码管上显示的数据从0开始每0.1秒加1,有启动,暂停,清零键 谢谢大家了..要个完整的程序!!!谢谢了?
中叔福金帅: //开始 P2^0//暂停 P2^1//清零 P2^2 #include <AT89X52.H>unsigned char Lcd_code[8];unsigned char code disp_code[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};unsigned char c_flag;void scanf(void); void InitTimer0(void){ TMOD = 0...
正定县15294786859: 51单片机实现秒表,要求16进制进位 - ?
中叔福金帅: 51单片机实现秒表, 0~9、A、b、C、d、E、F,16进制秒表. #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; ...
正定县15294786859: 51单片机编程秒表问题 - ?
中叔福金帅: 循环过程大致如下 void main() { //假设AB按钮为导通低电平 int num=0; int flag=1; while(1)//主循环 等待A按下 { while(flag)//等待A按下 { if(A连接的IO口为低电平) //A按下 { flag=0; } } if(B连接的IO口为低电平) //B按下 { flag=1; } if(num<100) { 显示num值; } else { num=0; 显示num值; } num++; } }
正定县15294786859: 用51单片机做秒表,按键按下停止计时,再按一次接着计时 - ?
中叔福金帅: 让定时器停止计时,只要TRx = 0这句就行,要让它继续,再TRx = 1; 例如,我的按键是P0.0,按一下停止,按一下继续,用定时器0,可以这样写:if(P0_0 == 0) {TR0 = ~TR0;while(P0_0 == 0); } 我只是提供个例子,实际运用中按键要记得加滤波