急~51单片机10毫秒秒表制作~在线等!
/***************************************************************************/
#include
sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;
/***************************************************************************/
void main(void){Time1();while(1){XS(m,s);}}//主函数
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}
}
/***************************************************************************/
void Time1(void)//定时器初始化
{
TH0=(65536-921)/256; TL0=(65536-921)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;
}
/***************************************************************************/
void XS(int xm,int xs) //数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;
P0=table[d1]; Axs=0; YS(10); Axs=1;//个位显示
P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位显示
P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位显示
P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位显示
}
/***************************************************************************/
void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数
/***************************************************************************/
这是我做的利用单片机定时器中断,模拟时钟的程序
和你要的一样,无偿奉献了
数码管的端口用的可能不一样,自己改下
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00
};
unsigned char second;
unsigned char keycnt;
unsigned int cnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
EA=1;
ET0=1;
second=0;
P0=table[second/10];
P2=table[second%10];
while(1)
{
if(P3_0==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_0==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P0=table[second/10];
P2=table[second%10];
break;
}
while(P3_0==0);
}
}
}
}
void to(void) interrupt 1 using 0 //*********定时器0,方式0
{
cnt++;
if(cnt==400)
{
cnt=0;
second++;
if(second==100)
{
second=0;
}
P0=table[second/10];
P2=table[second%10];
}
}
。。。我回答过了差不多的问题,你可以搜一下,不然我有重复回答的嫌疑
2楼正解
我博客上有做好了的硬件照片,也有相关的程序,你可以去参考。
51单片机 ,用C语言编程 通过独立按键控制蜂鸣器和静态数码管,_百度...
= 0xfe;wela = 0;delay(1);dula = 1;P0 = table[num % 100 \/ 10];dula = 0;P0 = 0xff;wela = 1;P0 = 0xfd;wela = 0;delay(1);dula = 1;P0 = table[num % 10];dula = 0;P0 = 0xff;wela = 1;P0 = 0xfb;wela = 0;delay(1);} void delay(uchar z){ uchar ...
如何编写51单片机音乐程序
设计的相关音乐说明 要产生音频脉冲,只要算出某一音频的周期(1\/频率),然后将此周期除以2,即为半周期时间。利用半周期时间定时这个半周期时间,每当计时到后就将输出的I\/O反向,然后重复计时此半周期再对I\/O反向,就可以在I\/O脚上得到此频率的脉冲。记数脉冲值与频率的关系公式如:N=Fi\/2\/Fr...
已知,AT89C51单片机晶振为6MHZ,工作于定时方式1,现要求定时10毫秒,请...
要求定时 10 000us。晶振 = 6MHz,机器周期T是 2us。定时 5000T 即可。初值:65536 - 5000 = 60536 = EC78H MOV TMOD, #01H ;T0工作于定时方式1 MOV TH0, #0ECH ;写初值 MOV TL0, #078H
51单片机晶振频率为12MHz,利用中断在P1.1口输出50HZ的方波,C语言,哪...
include <reg51.h>sbit port=P1^1;void Timer0Init(void)\/\/10毫秒@12.000MHz{TMOD &= 0xF0;\/\/设置定时器模式TMOD |= 0x01;\/\/设置定时器模式TL0 = 0xF0;\/\/设置定时初值TH0 = 0xD8;\/\/设置定时初值TF0 = 0;\/\/清除TF0标志TR0 = 1;\/\/定时器0开始计时}void main(){ Timer0Init(...
如何利用单片机汇编指令编程实现延时10ms?利用汇编指令设计多重循环编...
这是调用一个延时20毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了 DELAY20MS:MOV R2,#40DELAY20MS1:MOV R3,#250DJNZ R3,$DJNZ R3,DELAY20MS1RET RETRET的作用是子程序返回。调用一个子程序,当单片机...
51单片机的3个定时器怎样使用?
51单片机只有T0,T1。52才有T2的。定时器设置方法:做定时用一般采用16位模式,也就是TMOD=0x11(10或01单独一个定时器的话),初值的计算是这样的:假设时间是X毫秒,晶振为YMhz,那么:THn=(65536-1000*X*Y\/12)\/256 TLn=(65536-1000*X*Y\/12)%256 之后就是TRn=1(开启定时器)ETn=1(开启...
51单片机能产生10KHZ的pwm波吗
如果选用1T的单片机,产生10KHZ的pwm波毫无压力,12T的单片机,定时器有比较或16位自动重装功能也没问题,否则,程序设计得当勉强可以。掌握的原则就是中断程序里边尽量压缩代码量,节省执行时间。
51单片机 流水灯实现10S,10S后流水灯关闭
include<reg52.h> include<intrins.h> define uchar unsigned char define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;uchar pp,miao=10,aa;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};\/*延时函数*...
求单片机编程:利用定时器计数器T0方式1,输出一个是10毫秒的方波,晶震是...
include<reg51.h> void main(){ TMOD=0x01;\/\/定时器0方式1 TH0=(65536-2500)\/256;\/\/定时器5m s中断一次的初值 TL0=(65536-2500)%256;EA=1;\/\/开总中断 IT0=1;\/\/定时器0中断允许 TR0=1;\/\/启动定时器0 P1^0=0;\/\/输入方波初始为低电平 while(1){ } } void timer0 interrupt...
这是个基于51单片机做出来的时钟,显示秒和毫秒,求解释下关于秒和毫秒...
ff=msec\/10;\/\/分离出十位,实际为0.1s tt=msec%10;\/\/个位, 实际为0.01s x= sec \/100;\/分离出百位 多少个100s y= (sec % 100)\/10;\/分离出十位 z= sec % 10;\/分离出个位 \/\/===以下是毫秒显示 P0=DUANMA[tt];\/\/显示最低位 P1=0xFE;\/\/1111 1110 右数第一个数码管亮 D...
尘管肿节: #includeunsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};unsigned char second;unsigned char keycnt;unsigned int cnt;void main(void){unsigned char i,j;TMOD=0...
武城县19633289934: 51单片机:写一个10s的秒表程序,用一个按键分别控制秒表启动、停止、清零.(要求:使用定时器1定时,定时20中断一次)问题就在开关上,谁能给我说怎么处理 最好有代码 10 - ?
尘管肿节: 设立一个标志变量,初始化时,变量=0.定时器中断函数写成若标志变量为1则time++启动过程:扫描按键,若扫到,去抖延时,若扫到,标志变量取反.停止过程:同上.清零:扫描按键,若扫到,去抖延时,若扫到,且标志变量为0(停止状态),再循环扫描按键几个来回,具体时间可以用for来控制,目的就是实现一个长按清零.直接求代码很无聊,要自己写出来,做出来,才能体会到成功的酸爽.难点在长按与短按的区分,加油.
武城县19633289934: 51单片机完成简易秒表的设计 - ?
尘管肿节: 设计思路:1.定时器计时 设置秒表最小单位(如ms)设置定时器的寄存器初始值,定时器溢出显示等.2.键盘扫描 可设置中断也可直接键盘扫描,因键较少可以不必接成矩阵.可以只用三个键来实现. 键1:功能选择,包括功能设置、准备计时等 键2:计时开始,向上调整时间 键3:计时停止,向下调整时间3.显示 看单片机引脚多少,可以直接静态显示,可以用移位寄存器增加管脚功能.
武城县19633289934: 求单片机秒表程序、 - ?
尘管肿节: 秒表1/100秒显示单位,也就是10毫秒,用单片机的话你用定时器10毫秒中断一次就OK了,以下是部分程序,显示部分没做.second equ 30h ;存秒 sec100 equ 31h ;存1/100秒部分 org 0000h ljmp start org 000bh ljmp timer0 org 0100h start:...
武城县19633289934: AT89C51单片机设计一个简易秒表? - ?
尘管肿节: 定时器10ms中断 检测按键且10ms位加一 若10ms=10,100ms位加一 若10ms=10,1000ms位加一 以此内推 显示最好用LCD的 用数码管的也行 有疑问mail:290765583@163.com
武城县19633289934: 急求单片机课程设计电子秒表?
尘管肿节: 秒表的设计程序用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表, 具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S), 并启动倒计时功能.能用按键选择以上两功能之一. 三、程序代码: ...
武城县19633289934: 51单片机做一个10秒倒计时的程序 - ?
尘管肿节: C语言 #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit p27=P2^7;//数码管位选端定义 uchar c,i; //数码管译码表 unsigned char code NumDecode[] = { 0XC0,//;0 0XF9,//;1 0XA4,//;2 0XB0,//;3 0X99,//;4 0X92,//;5 0X...
武城县19633289934: 设MCS - 51单片机主频为12MHZ,编写一个延时10秒的程序 - ?
尘管肿节: void timer0() interrupt 1 { uchar count; TH0 = (65536-50000)/256; TL0 = (65536-50000)%6; count++; if(count == 20) { count = 0; sec++; if(sec == 100) { sec = 0; } } }
武城县19633289934: 用51单片机做秒表,按键按下停止计时,再按一次接着计时 - ?
尘管肿节: 让定时器停止计时,只要TRx = 0这句就行,要让它继续,再TRx = 1; 例如,我的按键是P0.0,按一下停止,按一下继续,用定时器0,可以这样写:if(P0_0 == 0) {TR0 = ~TR0;while(P0_0 == 0); } 我只是提供个例子,实际运用中按键要记得加滤波
武城县19633289934: 用单片机的汇编语言编写一个(十秒秒表 的编程) - ?
尘管肿节: ;功能:0~9,数码管显示计时;共阳接法;P1口接数码管 ORG 0000H LJMP MAIN ORG 001BH ;定时器T1,中断入口 LJMP T1_ISR ORG 0030H;主程序MAIN: MOV TMOD,...