51单片机4位LED电子钟怎么编程

作者&投稿:产肯 (若有异议请与网页底部的电邮联系)
51单片机制作电子钟编程~

DAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HMIN EQU 79HHOUR EQU 7AHDOT BIT 01HORG 0000HLJMP MAINORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#11H MOV TH0,#03CH MOV TL0,#0B0H MOV TH1,#0ECH MOV TL1,#078H MOV SCANLED,#0 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 MOV CLK,#0 SETB EA SETB ET1 SETB TR1 SETB TR0 SETB ET0LOOP: JB P3.7,LOOP JNB P3.7,$ MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 SJMP LOOP;------------------;十六进制转换为BCDHBCD: MOV B,#10 DIV AB SWAP A ORL A,B RET DELAY: MOV R3,#50DELAY1: MOV R4,#100 DJNZ R4,$ DJNZ R3,DELAY1 DJNZ R2,DELAY RET;--------------------T0ISR: PUSH ACC CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC CLK MOV A,CLK CJNE A,#20,T0ISRE MOV CLK,#0 INC SEC MOV A,SEC CJNE A,#60,T0ISRE MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,T0ISRE MOV MIN,#0 INC HOUR MOV A,HOUR CJNE A,#24,T0ISRE MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0T0ISRE: LCALL DISCHG POP ACC RETI;--------------------DISCHG: MOV A,HOUR LCALL HBCD PUSH ACC ANL A,#0FH MOV 34H,A POP ACC ANL A,#0F0H SWAP A MOV 33H,A MOV A,MIN LCALL HBCD PUSH ACC ANL A,#0FH MOV 36H,A POP ACC ANL A,#0F0H SWAP A MOV 35H,A MOV A,SEC LCALL HBCD PUSH ACC ANL A,#0FH MOV 38H,A POP ACC ANL A,#0F0H SWAP A MOV 37H,A RET;--------------------T1ISR: PUSH ACC CLR TR1 MOV TH1,#0ECH MOV TL1,#78H SETB TR1 MOV DPTR,#LEDTAB1T100: MOV R0,#DAT MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T101 CLR P3.1 SETB P3.4 SJMP T1DIST101: DEC A JNZ T102 CLR P3.4 SETB P3.5 SJMP T1DIST102: DEC A JNZ T103 CLR P3.5 SETB P3.2 SJMP T1DIST103: DEC A JNZ T104 CLR P3.2 SETB P3.3 SJMP T1DIST104: DEC A JNZ T105 CLR P3.3 SETB P3.0 SJMP T1DIST105: CLR P3.0 SETB P3.1T1DIS: MOV A,@R0 MOVC A,@A+DPTRT1DIS1: MOV P1,A INC SCANLED MOV A,SCANLED CJNE A,#6,T1END MOV SCANLED,#0T1END: POP ACC RETI;--------------------LEDTAB1: DB 0C0H ;"0" 00H DB 0F9H ;"1" 01H DB 0A4H ;"2" 02H DB 0B0H ;"3" 03H DB 99H ;"4" 04H DB 92H ;"5" 05H DB 82H ;"6" 06H DB 0F8H ;"7" 07H DB 80H ;"8" 08H DB 90H ;"9" 09H DB 88H ;"A" 0AH DB 83H ;"B" 0BH DB 0C6H ;"C" 0CH DB 0A1H ;"D" 0DH DB 86H ;"E" 0EH DB 8EH ;"F" 0FH DB 0FFH ;" " 10H;--------------------END

我写了个六位数码管的程序,放到这里让你参考一下,希望对你有用!
/*******************************************************************
数码管时钟秒表篇
功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节
时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一
个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为
调节秒钟状态),key4键为秒表功能键。


实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成
数码管时钟调节功能;第三步:完成数码管秒表显示功能。

操作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键
为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。


********************************************************************
********************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选编码
uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71,0x00};
uchar temp; //temp为按键变量
int light,flag; //flag用来控制数码管显示的状态(显示时钟或者显示秒表),light用来控制时钟和秒表的led显示
uchar shi2,ge2,shi1,ge1; //这四个变量用来分离出实参的十位和个位
uchar num,num1,num2,num3; //num,num1用来计数,num2用来控制调节的时分秒,num3用来改变秒表状态下的显示状态
int miao,fen,shi; //时钟变量
uchar mfen,mmiao,mmmiao; //秒表变量
void delay(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void timeinit()
{
TMOD=0x11;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
}
void timedisplay0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
if(num==20)
{
num=0;
miao++; //开启时钟功能
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}
void timedisplay1() interrupt 3
{
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
num1++;
if(num1==2)
{
num1=0;
mmmiao++;
if(mmmiao==100) //开启秒表功能
{
mmmiao=0;
mmiao++;
if(mmiao==60)
{
mmiao=0;
mfen++;
if(mfen==60)
mfen=0;
}
}
}
}
void display(uchar add,uchar date) //数码管显示信息函数(带有小数点)
{
shi2=date/10;
ge2=date%10;


P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
dula=1;
P0=table2[shi2];
dula=0;
delay(1);


P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
dula=1;
P0=table2[ge2]|0x80;
dula=0;
delay(1);
}
void display1(uchar add,uchar date) //数码管显示数据(不带有小数点)
{
shi1=date/10;
ge1=date%10;

P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
dula=1;
P0=table2[shi1];
dula=0;
delay(1);


P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
dula=1;
P0=table2[ge1];
dula=0;
delay(1);
}
void keyscan()
{
P3=0xfd;
temp=P3; //第二行功能键
if(temp!=0xfd)
{
delay(5);
if(temp!=0xfd)
{
beep=0;
switch(temp)
{
case 0xed: num2++; //第一个按键用来控制调节时,分,秒
TR0=0;
light=1;
if(num2==4)
{
num2=0;
light=0;
TR0=1;
}
break;
case 0xdd: if(num2==1) //第二键用来增加数据
{
shi++;
if(shi==24)
shi=0;
}
if(num2==2)
{
fen++;
if(fen==60)
fen=0;
}
if(num2==3)
{
miao++;
if(miao==60)
miao=0;
}
break;
case 0xbd: if(num2==1) //第三个键用来减小数据
{
shi--;
if(shi==-1)
shi=23;
}
if(num2==2)
{
fen--;
if(fen==-1)
fen=59;
}
if(num2==3)
{
miao--;
if(miao==-1)
miao=59;
}
break;
case 0x7d: flag=1; //第四个键用来开启秒表
num3++;
TR1=1;
if(num3==1)
mfen=mmiao=mmiao=0; //清除上次残留数据
if(num3==2)
TR1=0; //暂停秒表
if(num3==3)
{
mfen=mmiao=mmmiao=0; //秒表清零
TR1=0;
}
if(num3==4) //重新开启秒表
TR1=1;
if(num3==5) //暂停秒表
TR1=0;
if(num3==6) //切换为显示时钟状态
{
flag=0;
num3=0;
}
break;
}
while(temp!=0xfd)
{
temp=P3;
}
beep=1;
}
}
}
int main()
{
timeinit();
beep=1;
while(1)
{
keyscan();
if(light==0)
{
if(miao%2==0) //当数码管显示时钟状态时,八个led将以亮一秒灭一秒的状态循环下去
P1=0;
else
P1=0xff;
}
else
{
if(num2==1)
P1=0xfe;
if(num2==2)
P1=0xfd;
if(num2==3)
P1=0xfb;
}
if(flag==0) //显示时钟
{
display(1,shi);
display(3,fen);
display1(5,miao);
}
else //显示秒表
{
display(1,mfen);
display(3,mmiao);
display1(5,mmmiao);
}
}
return 0;
}

以下是6位数码管显示;供参考

#include "reg51.h"
#include "intrins.h"
#include <absacc.h>

#define unit unsigned int
#define char unsigned char
sbit deng1=P0^1;
sbit deng2=P0^2;
sbit kongzhi=P0^0;

char code dis_7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00, 0xff };
/*共阴LED数码管段码 0 1 2 3 4 5 6 7 8 9 10 A B C D E F 灭 */
char data timedata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//定义计数单元初值0,6个
unsigned long data miao;
char code weisao[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位扫描控制字
char data BUFFER[1]={0}; //定时器记数变量
char data wei=-1; //时间设置时选种位
char c=0; //闪烁次数变量
bit flag=0; //标志位
char j1,j; //计数标志
void delayxms( char t) //1*T毫秒延时
{
char i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}

ledxian() //LED显示子程序
{
char k;
for(k=0;k<6;k++)
{
if(wei==-1) //当WEI为-1时正常显示
{
P1=dis_7[timedata[k]];//各位时间显示值转段码
}
else //WEI不为-1时再判断哪一位K闪
{
if(k==wei) //K=WEI时闪等扫过128次时闪
{
if(j==128)
{
//j1++;
//if(j1==1)
flag=~flag; //J到128时标志位取反
}
j++;

if(!flag)
{
P1=dis_7[16]; //灭LED灯
if(j==0)
{
if(c<15) //选种后闪烁次数
{
c++ ;
}
else //20次到了清WEI标志,清闪烁次数标志
{
wei=-1;
c=0;
ET0=1; //定时中断开
}

}
}
else
{
P1=dis_7[timedata[k]]; //FLAG=1时正常显示

}
}
else
{
P1=dis_7[timedata[k]]; //J不到128则正常显示
}
}
P2=~weisao[k]; //位扫描
delayxms(1); //1毫秒延时
P2=~0xff; //屏蔽

}
}
//////////////////主函数///////////////////
void main(void)
{
P1=0xff; //初始化端口
IT0=1; //外部中0断为跳沿触发方式
EX0=1; //外部中0允许
IT1=1; //外部中1断为跳沿触发方式
EX1=1; //外部中1允许
EA=1; //开中断
ET0=1; //允许定时器0
TMOD=0x11; //T0中断工作方式1
TH0=-5240/256; //
TL0=-5240%256;
TR0=1; //TRO为T0的运行控制位,开启中断,启动定时器
TH1=-5240/256; //
TL1=-5240%256;
ET1=1;

while(1)
{
ledxian() ; //调用LED显示子程序
}

}

void timer0(void) interrupt 1 using 1 //定时器0中断,用第1组寄存器
{
ET0=0; //关T0中断
TH0=-5240/256;//定时器初值5MS
TL0=-5240%256;
BUFFER[0]=BUFFER[0]+1;
if(BUFFER[0]==200) //1秒时间到加1
{
BUFFER[0]=0;//时间到附0
/*timedata[0]++; //秒个位加1
if(timedata[0]>=10) //秒个位到10则进秒十位
{
timedata[0]=0;timedata[1]++;
if(timedata[1]>=6) //秒十位到6则进分个位
{
timedata[1]=0;timedata[2]++;
if(timedata[2]>=10) //分个位位到10则进分十位
{
timedata[2]=0;timedata[3]++;
if(timedata[3]>=6) //分十位到6则进小时个位
{
timedata[3]=0;timedata[4]++;
if(timedata[4]>=10) //小时个位到10则进小时十位
{
timedata[4]=0;timedata[5]++;
}
if(timedata[5]==2) //当小时为24时下一个变0
{
if (timedata[4]==4)
{
timedata[4]=0;timedata[5]=0;
}
}
}
}
}
}*/

miao++;
if(miao==86400)
{
miao=0;
}
timedata[0]=miao%10;
timedata[1]=(miao%60)/10;
timedata[2]=(miao/60)%10;
timedata[3]=((miao/60)%60)/10;
timedata[4]=(miao/3600)%10;
timedata[5]=(miao/3600)/10;

}
ET0=1; //开中断
}

void timer1(void) interrupt 3
{
TR1=0;
ET1=0; //关T1中断
EX0=1;
EX1=1;
TH1=-5240/256;//定时器初值5MS
TL1=-5240%256;
ET1=1;
}

void INT00(void) interrupt 0 using 2 //外部中断0设置时间时调准位,用第2组寄存器
{

EX0 = 0; //关中断
TR1=1;
wei++; //中断一次加1
ET0=0; //定时中断关
if(wei>=6)
{
wei=-1; //当到最高位5时付初值-1
ET0=1; //定时中断开

}
j=0;
//j1=0;

/*for (k=0;k<9;k++)
{
P1=dis_7[16];//各位时间显示值转段码
//P1=0X06;
P2=~weisao[wei]; //位扫描

delayxms(300); //1毫秒延时
P1=dis_7[0];
delayxms(300);
//TR0=0;
}*/

//EX0 = 1; //开中断
}

void INT11(void) interrupt 2 using 3 //外部中断时种调准(+1),用第3组寄存器
{
EX1 = 0; //关中断
TR1=1;
switch(wei) //判断要调准的是哪一位
{
case 0 :
{
if(timedata[wei]<9) // 秒个位时加到10时返回0
{

timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}
break;
case 1 :
{
if(timedata[wei]<5) // 秒十位时加到6时返回0
{

timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}
break;
case 2:
{
if(timedata[wei]<9) // 分个位时加到10时返回0
{

timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}
break;
case 3:
{
if(timedata[wei]<5) // 分十位时加到6时返回0
{

timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}
break;
case 4:
{ // 小时个位设置
if(timedata[5]==0 || timedata[5]==1 ) //当小时十位是0或1时加到10返回到0
{
if(timedata[wei]<9)
{
timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;}
}
else //当小时十位是2时加到3返回到0
{
if(timedata[wei]<4)
{
timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}

}
break;
case 5:
{
if(timedata[wei]<2) //小时十位到3返回到0
{

timedata[wei]=timedata[wei]+1;
}
else
{
timedata[wei]=0;
}
}
break;
default: break;
//////////////////////////////////////////
}

miao=(timedata[0]+timedata[1]*10)+(timedata[2]+timedata[3]*10)*60+(timedata[4]+timedata[5]*10)*3600;

//EX1 = 1; //开中断

}

4 位LED只能月、日和时、分轮流显示?


急求:使用四个独立按键控制四个LED灯亮灭的单片机汇编程序
单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4 程序:ORG 00H START: MOV A,P1 ANL A,#0F0H RR A RR A RR A RR A ORl A,#0F0H MOV P1,A SJMP START 可以检测单个按键,也可以同时检测多个按键 过程:开始——读P1口数据到A——A中的数据右移...

四个一位数码管与单片机怎么连接
【1】笔段分别接限流电阻和单片机一个P口相连。【2】位选信号通过一个IO口加三极管放大后相连。共四组。具体还应考核数码管的共阴共阳结构。2.1)共阳型,采用PNP管,发射极接正电源,集电极连接位选,基极加限流电阻接IO口。2.2)共阴型,NPN,E接地,C接位选,B加R接IO口。

求一个以单片机为核心,组成一个电子时钟系统的程序
系统显示器由4位LED组成,分别显示时间值的小时和分(24小时制和12小时制可选);能够随时对当前的时间进行调整,能够随时输入定时(闹钟)时间;定时时间到,发出蜂鸣提醒信号,闹钟提醒信号的形式为断续形式,最长不超过1min,可手动止闹;按键数目  4个。扩展部分:能显示年月日周时分秒具有语音报时或温度指示功能提示:...

单片机控制以4位一体的数码管(共阴),设置一个按键,开机数码管显示“12...
编程思路,仅供参考 1.因为是四位片选数码管,所以只能采用动态扫描方式点亮数码管,利用人体视觉延迟效应,整体让人感觉是同时点亮四个数码管 2.依次点亮四个数码管:千位点亮3毫秒后关闭,紧接着点亮百位3毫秒,再是分别点亮十位和各位(3毫秒只是习惯参数,也可以2毫秒过意4毫秒,太长会出现数码管闪烁...

51单片机,4个LED,case1,4个灯循环亮.Case2,1,2和4号灯循环亮,case3,1...
case 1里面用循环函数,case 2 分别设置确定的灯亮,中间加延迟,case 3 同case 2 记得每个case里面加while并检测case条件。

单片机P0端口家接了4个LED发光二极管,P3.2端口接了一个按键?
include<reg51.h> define uchar unsigned char sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;uchar LED=0xfe;void delay(uchar a){ uchar i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} main(){ P0=0xff;while(1){ while(key1==0){P0=0x00;delay(...

用C语言写一个使单片机P3口高四位LED和低四位LED轮流点亮的程序。_百度...
是指 高4位 一起亮,然后换 低4位 一起亮吗?如果是,那主函数应该是:void main(){ P3=0x0f;while(1){ P3=~P3;delay();} } 至于LZ出现的问题,那是因为 LZ 的每一行 赋值,都改变了原来的灯,导致到最后(延时函数之前)只有一个灯是亮的,2次延时,结果 只能看到2个灯是亮的。

51单片机用一个IO口实现用4个复位开关按键来控制4个LED灯
开启电路时1号灯是亮的,按下2号开关一号灯灭以此类推!--- 怎么类推?按下3号开关二号灯灭?二号灯,从来也没有亮啊!

用Keil uVision软件编一个让4位LED数码管显示数字的程序
include<reg52.h> include<intrins.h> sbit wei=P1^0;sbit duan=P1^1;int w[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};int i,tt;int temp;void main(){ TMOD=0X01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;tt=0;i=0;temp=0xfe;duan=1...

用C语言写一个程序,使单片机的P3口的高四位LED和低四位LED轮流...
你要实现的是高4位或低4位是4个一起亮? 实际上是P3=0XF7,延时,P3=0X7F,延时。。。只有第4、8两个LED轮流点亮。因为亮的两灯的前3条执行得太快,根本看不出。

东区17012089781: (51单片机)找一个电子时钟的(C语言)程序,用LED灯做秒表,四个数码管做时 - 分.急急急!
资响源心: 有XS128的 //延时控制 void delay(void) { int m,n; for(m=14000;m;m--) { for(n=1000;n;n--) {} } } void LED(void) { PORTB=0XFE; delay(); PORTB=0XFC; delay(); PORTB=0XF8; delay(); PORTB=0XF0; delay(); PORTB=0XE0; delay(); PORTB=0XC0; ...

东区17012089781: 51单片机C语言共阴极LED数码管时钟编程 -
资响源心: 是4位数码管吧 只考虑分钟的调整 没有考虑小时的调整吧...

东区17012089781: 单片机电子时钟编程 -
资响源心: SDA BIT P0.0 SCL BIT P0.1 LED0 EQU 40H LED1 EQU 41H LED2 EQU 42H LED3 EQU 43H LED4 EQU 44H LED5 EQU 45H second equ 50h minute equ 51h hour equ 52hMOV DPTR, #TABLEMOV LED0,#0MOV LED1,#5MOV LED2,#9 ...

东区17012089781: 用89c51单片机和4位数码管做一个动态显示的时钟,程序怎么编写,求大神帮助. -
资响源心: # include <reg51.h> // 显示 0 1 2 3 4 5 6 7 , 8位数码管 试试 char code table[] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x53, 0x79, 0x71}; void delayms(int k); void main() { while (1) { char i = 0; for (P3 = 0xfe; P3 !...

东区17012089781: 急求基于51单片机数字电子钟的汇编程序 -
资响源心: #include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0...

东区17012089781: 单片机电子钟程序 -
资响源心: 51单片机在数码管上显示的数字钟程序:#include "at89x51.h" unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0...

东区17012089781: 求c51单片机电子钟程序(c语言) -
资响源心: 以下是四位数码管可调时带秒闪烁的c51单片机电子钟程序(c语言)./**** 本程序中,晶振为12MHz, ****//**** 时间控制采用定时中断控制方式. ****//**** 模式和时间调整采用查询方式. ****/#include<reg52.h> sbit P20=P2^0; //分个位控制端 ...

东区17012089781: 求指导,要求做一个51单片机的转速计的c程序,脉冲输入后,可以在4位led上显示转速,但是我不是很明白 -
资响源心: 从LZ描述看来,测速的硬件已经具备,只是不明白如何测量脉冲计数并计算转速.首先你应该知道你的转速范围是多大?每秒几十转还是几百转甚至上千转?不同的转速对应不同的设计.可以使用51的定时器/计数器来实现脉冲捕获计数.比如使用T0.设置T0的工作模式,一般可用自动重装8位计数的模式2.在T0的溢出中断中,设计二重计数cntT0.比如T0为200转溢出,则中断时再累加一次即累加了200转.设置T1为定时器模式,可以定时1S或10ms(计为t),由你转速及程序复杂度决定.在T1中断程序中,读取cntT0的值和T0的值(计算为rt),则转速为rt/t

东区17012089781: 单片机程序,帮我写一个单片机数字钟的程序. -
资响源心: #include#define uchar unsigned char uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9 unsigned char sec=0,min=0,hour=12,scanled; unsigned char key,flashbit,mode,time; unsigned char disdat[8]; sbit led=P1^0; ...

东区17012089781: 制作51单片机小闹钟 -
资响源心: 很简单 不过也没人想帮你弄 虽然只要200来行的程序...但是也是要化一些精力的..不如买块开发板吧..如果你有C语言基础..直接重小闹钟开始 学习和学程序最多两天 加上调试一天 焊电路一天 最多4天就搞定了. 反正我重头学单片机学完中断就写了一个闹钟...就4天时间..你试试吧.反正不要多少时间

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