1、计数、显示及按键采集用单片机最简单,价格不贵,方便编程。2、数码管显示,要看你选型,有没有''的,我没用过,不知道了。'可以将数码管反过来用dot代,不足的'可用一个led了。呵呵,你也许不用显示'或'',那就

由74LS00两个与非门组成RS触发器,以及两个74LS00、C3、R17组成单稳态电路。利用74LS160作为十分频和加法计数,而U3、U4通过一个与非门进行级联。用两个7447作为译码驱动加到了数码管。唉,算了,与非门、触发器这些东西

数字秒表电路设计 一、工作原理 本电路由启动、清零复位电路、多谐振荡电路、分频计数电路、译码显示电路等组成。如下图所示:启动清零复位电路主要由U6A、U6B、U7B、U7D组成,其本质是一个RS触发器和单稳态触发器。J1控制

图1-5三.通过使用multism软件设计一个能显示1s为最小单位的电子秒表。1.设计目的:(1)了解计时器主体电路的组成及工作原理;(2)熟悉集成电路及有关电子元器件的使用;(3)学习数字电路中基本555定时器、时钟发生器及计数、

(5)控制器:控制电路是对秒表的工作状态(记时开始/暂停/继续/复位等)进行控制的单元,可由触发器和开关组成。四.单元电路设计,参数计算和器件选择:1.时钟发生单元 时钟发生器可以采用石英晶体震荡产生100HZ时钟信号,也

设计要求1.设计一个数字秒表,要求从00:00秒开始计时,最大计时时间为99:99秒。并且具有启动、暂停和清零(复位)等功能。2.画出硬件连接电路图,说明各个控制信号的 设计要求 1.设计一个数字秒表,要求从00:00秒开始计时

一、电路组成 电路由秒脉冲发生器、计数器、译码器、显示电路、报警电路和辅助控制电路五部分组成,见右图。其整机电路如下图所示,印制板电路如左图所示。1.秒脉冲发生器 秒脉冲产生电路由555定时嚣和外接元件R1、R2、C

课程设计数字秒表设计 求高手解答。

/* “验证式"?实验十一 八段数码管显示 */ include define LEDLen 6 define mode 0x03;define CAddr XBYTE[0xe100]/* 控制字地址 */ define OUTBIT XBYTE[0xe101]/* 位控制口 */ define CLK164

define SEG P0 //定义七段LED数码管接至Port 0 /*声明七段LED数码管驱动信号数组(共阳)*/ char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4 0x92,0x83,0xf8,0x80,0x98}; //数字5-9

但在实际单片机硬件电路连接中,都把段码线并联,故,静态显示方式下,所有数码管显示相同。3. 由于各个数码管的段码线并联,(静态显示下)在同一时刻,8个数码管将显示相同的字符,因此若要各个数码管能够同时显示出与本位

单片机led数码管 秒表仿真实例,很简单的,可以参考一下,include // 秒表程序 define uint unsigned int define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

根据查询数字时钟实验报告得知,实验1是通过开关向单片机提出中断请求,单片机响应中断进行计数,并通过LED数码管指示出计数值,从而观察中断的请求、响应的过程。实验2是通过单片机的定时器产生延时,控制LED闪烁的方法。通过本实验

1. 熟悉51单片机的IO口编程方法:通过对51单片机的IO口编程,可以更好地了解51单片机的工作原理,为后续的单片机编程打下基础。2. 熟悉led数码管的驱动原理:led数码管是常见的数字显示设备,通过数字电路将数字信号转换为led

单片机led数码管实验

OneSecondCounter EQU 39H;设置一个第二个地址计数器,1个计数器是用来计数的秒计时器中断< /小时EQU 3AH;小时计数器地址 分钟EQU 3BH;二EQU 3CH分钟计数器地址设置秒计数器地址 年EQU 3DH,地址 计数器的设定月日年

void t0isr() interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num>=20){ num=0;dat++;dat%=10;P0=table[dat];} } main(){ TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)

设计一个秒表,需要考虑以下因素:1、因为视觉暂留的因素,一般而言到0.1秒的精度就可以了。2、需要有按键控制启动、停止、清零这些功能。KEYVAL EQU 30HDAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HSEC1 EQU

P0=tab[second%10];//显示个位 delay();} void main(){ TMOD=0x01;//用T0定时,中断方式 TH0 =0x3C;//晶振12M,定时50ms TL0 =0xB0;IE =0x82;while(1){ display();//调显示子程序 if(k1==0)//按键按

用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。

ORG 0000H JMP BEGIN ORG 000BH LJMP T0ISR ORG 0030HTABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---BEGIN: MO

分别用汇编语言,定时器T0方式二,制作LED数码管显示的秒表,计数范围 0.1~0.9。2位数码管,只有一个键。第一次按下计时功能键,开始计数,并显示;第二次按下计时功能键,停止计时,并计算两次按下计时功能键的时间并

分别用汇编语言,定时器T0方式二,制作LED数码管显示的秒表,计数范围0.1~0.9,2位数码管?

1、秒计数器模块设计:模块图如图1。六十进制带进位计数器,可清零,clk输入信号为1Hz脉冲,当q0计满9后q1增加1,当q0满9且q1记满5,q1、q0同时归零,co输出为高电平。q1为十位q0为个位。图1 程序如下:library

数字秒表电路设计 一、工作原理 本电路由启动、清零复位电路、多谐振荡电路、分频计数电路、译码显示电路等组成。如下图所示:启动清零复位电路主要由U6A、U6B、U7B、U7D组成,其本质是一个RS触发器和单稳态触发器。J1控制

4.基本放大电路——分压式射极偏置电路5图1-45.实用精密检波放大电路。图1-5三.通过使用multism软件设计一个能显示1s为最小单位的电子秒表。1.设计目的:(1)了解计时器主体电路的组成及工作原理;(2)熟悉集成电路及有

1.时钟发生单元 时钟发生器可以采用石英晶体震荡产生100HZ时钟信号,也可以用555定时器构成的多谐振荡器,555定时器是一种性能较好的时钟源,切构造简单,采用555定时器构成的多谐振荡器做为电子秒表的输入脉冲源。因输出要求

单片机:如Arduino UNO,具有数字和模拟输入/输出引脚。LED:根据你的需要选择LED的数量和颜色。7段显示器:用于显示秒表的数字,可选。按键:用于启动、暂停和重置秒表。适当的电阻:用于限制电流,保护LED和7段显示器。硬件

如何设计电子秒表?

#include //#include #define LEDS 8 /***按键程序***/ char keyscan(); /***显示程序***/ void display(); char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组 /***计算程序***/ void calculate(char k,char c1[8],char c2[8]); /***片选***/ unsigned char code Select[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***码选***/ unsigned char code LED_CODES[]= {0xC0,0xF9,0xA4,0xB0,0x99, //0-4 0x92,0x82,0xF8,0x80,0x90, //5-9 0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,- /***main函数***/ void main(void) { char i,j,k,c; char a[8],b[8]; /***定时1ms***/ TMOD=0; TL0=-(1000/256); TH0=-(1000%256); EA = 1; //总中断开关 ET0 = 1; //开中断 TR0 = 1; //启用计数器0 KSC:do { for(i=1;i<9;i++) //数字录入循环 { dsp[0]=keyscan(); if(c==2&&dsp[0]<10) //此段代码验证是否有旧的计算结果在显示,且不再参与新计算 { dsp[1]=dsp[0]; for(j=2;j<9;j++) dsp[j]=12; c=0; } else if(c==2&&dsp[0]>9) //旧的计算结果将参与新的计算,作为第一个数 { c=0; } if(dsp[0]==0&&dsp[1]==0&&dsp[2]==12) //个位为0且十位为空时按下0,按键无效,跳回KSC等待正确输入 { /***goto跳转标志***/ goto KSC; } else if(dsp[0]>9) break; //有操作符按下,跳出数字录入循环 else {for(j=i;j>0;j--) dsp[j]=dsp[j-1]; //移位,以正确显示数字 } } if(i==9) //判断是否输入8个有效数字,是则等待操作符,否则直接判断操作符 { do //使用do while无论是否第一个数都取一次操作符 { dsp[0]=keyscan(); //获取操作符号 if(dsp[0]==14||dsp[0]<10) //按下C或者第9位数字清零 { dsp[1]=0; for(i=2;i<9;i++) dsp[i]=12; c=0; } }while((dsp[0]==15)&&(c==0)); //等号被按下,等待新的操作符(仅对第一个数字有效) } else if(dsp[0]==14) //按下C清零 { dsp[1]=0; for(i=2;i<9;i++) dsp[i]=12; c=0; } while(dsp[0]==15&&c==0) //未输满8位且是第一个数字即按下等号,等待非等号操作符 { dsp[0]=keyscan(); //获取操作符号 if(dsp[0]==14||dsp[0]<10) //按下C或者数字都进行清零,重新输入a { dsp[0]=14; //将dsp[0]置为14,防止因数字清零未能拦截 dsp[1]=0; for(i=2;i<9;i++) dsp[i]=12; c=0; } } }while(dsp[0]==14); //数字输入未完成即按下C,重新等待输入 do { if(c==0) //没有数字输入 { k=dsp[0]; //存计算符(循环内已排除C、=、数字) for(i=0;i<8;i++) //将第一个数存入a[8] { a[i]=dsp[i+1]; } dsp[1]=0; //清零 for(i=2;i<9;i++) dsp[i]=12; c=1; //已输入a /***goto跳转标志***/ goto KSC; } else if(c==1) { for(i=0;i<8;i++) //将第二个数存入b[8] { b[i]=dsp[i+1]; } c=2; //已输入b if(dsp[0]!=15) //b输完后操作符不是等号 { calculate(k,a,b); for(i=0;i<8;i++) //将计算结果存入a[8],a值更新 { a[i]=dsp[i+1]; } k=dsp[0]; //更新计算符 c=1; /***goto跳转标志***/ goto KSC; } } }while((dsp[0]==15)&&(c<2)); //直到ab输入完成且按下等号 calculate(k,a,b); //进行最后计算 /***goto跳转标志***/ goto KSC; //跳回KSC,等待新一轮计算 while(1); //防止程序跑飞 } char keyscan() { char KeyL; char KeyR; char j; do { do { P3=0xF0; P3=P3|0xF0;//行扫描11110000 if(P3!=0xF0) { KeyL=P3; P3=0x0F; P3=P3|0x0F;//列扫描00001111 KeyR=P3; } }while(KeyL==0xF0||KeyR==0x0F); for(j=0;j<12;j++) //延时0.001s=1ms {;} }while(P3!=0x0F); switch(KeyL&KeyR) { case 0x28:{return 0;break;} case 0x11:{return 1;break;} case 0x21:{return 2;break;} case 0x41:{return 3;break;} case 0x12:{return 4;break;} case 0x22:{return 5;break;} case 0x42:{return 6;break;} case 0x14:{return 7;break;} case 0x24:{return 8;break;} case 0x44:{return 9;break;} case 0x81:{return 10;break;}//加法(第一行,第四列) case 0x82:{return 11;break;}//减法(第二行,第四列) case 0x84:{return 12;break;}//乘法(第三行,第四列) case 0x88:{return 13;break;}//除法(第四行,第四列) case 0x18:{return 14;break;}//清零(第四行,第一列) case 0x48:{return 15;break;}//计算结果(第四行,第三列) } } void display() interrupt 1 using 1 //利用定时器中断实现间时显示 { char i,j,h; ET0=0; for(j=8;j>0;j--) //扫描8次 { for(i=7;i>=0;i--) //从高位到低位扫描显示 { P2=0; P1=LED_CODES[dsp[8-i]]; P2=Select[i]; for(h=0;h<8;h++) {;} } } TL0=-(1000/256); TH0=-(1000%256); ET0=1; } void calculate(char k,char a[8],char b[8]) { char r[8]; long i,x,y; i=0; x=0; y=0; for(i=7;i>0;i--) //数值转化,将代表空格的12转化为数字0,因为个位不显示空格,默认为0,所以不转化 { while(a[i]==12)a[i]=0; while(b[i]==12)b[i]=0; } x=a[4]; x=10000*x; x=x+a[0]+a[1]*10+a[2]*100+a[3]*1000+a[5]*100000+a[6]*1000000+a[7]*10000000; y=b[4]; y=10000*y; y=y+b[0]+b[1]*10+b[2]*100+b[3]*1000+b[5]*100000+b[6]*1000000+b[7]*10000000; if(k==10)//加法运算 { x=x+y; if(x>99999999) //大于8位,显示“Err” { r[0]=11; //r r[1]=11; //r r[2]=10; //E r[3]=12; //空格 r[4]=12; r[5]=12; r[6]=12; r[7]=12; } else { r[0]=x%10; r[1]=(x%100)/10; r[2]=(x%1000)/100; r[3]=(x%10000)/1000; r[4]=(x%100000)/10000; r[5]=(x%1000000)/100000; r[6]=(x%10000000)/1000000; r[7]=x/10000000; } } if(k==11)//减法运算 { if(x<y) { x=y-x; if(x>9999999) { r[0]=11; //r r[1]=11; //r r[2]=10; //E r[3]=12; //空格 r[4]=12; r[5]=12; r[6]=12; r[7]=12; } else { r[0]=x%10; r[1]=(x%100)/10; r[2]=(x%1000)/100; r[3]=(x%10000)/1000; r[4]=(x%100000)/10000; r[5]=(x%1000000)/100000; r[6]=(x%10000000)/1000000; r[7]=x/10000000; for(i=7;i>0;i--) //将有效数字的高一位转化为-号 { if(r[i]==0&&r[i-1]!=0) { r[i]=14; break; } } } } else { x=x-y; r[0]=x%10; r[1]=(x%100)/10; r[2]=(x%1000)/100; r[3]=(x%10000)/1000; r[4]=(x%100000)/10000; r[5]=(x%1000000)/100000; r[6]=(x%10000000)/1000000; r[7]=x/10000000; } } if(k==12)//乘法运算 { i=x; x=x*y; if(y==0) { x=0; } else if(x>99999999||x<i) //积大于99999999或者小于乘数都认为是异常,存在其他可能的溢出,须自行辨别 { r[0]=11; //r r[1]=11; //r r[2]=10; //E r[3]=12; //空格 r[4]=12; r[5]=12; r[6]=12; r[7]=12; } else { r[0]=x%10; r[1]=(x%100)/10; r[2]=(x%1000)/100; r[3]=(x%10000)/1000; r[4]=(x%100000)/10000; r[5]=(x%1000000)/100000; r[6]=(x%10000000)/1000000; r[7]=x/10000000; } } if(k==13)//除法运算 { if(y==0) //被除数不能为0 { r[0]=11; //r r[1]=11; //r r[2]=10; //E r[3]=12; //空格 r[4]=12; r[5]=12; r[6]=12; r[7]=12; } else { x=x/y; r[0]=x%10; r[1]=(x%100)/10; r[2]=(x%1000)/100; r[3]=(x%10000)/1000; r[4]=(x%100000)/10000; r[5]=(x%1000000)/100000; r[6]=(x%10000000)/1000000; r[7]=x/10000000; } } for(i=7;i>0;i--) //数值转化,将高位的无效数字0转化为空格符12 { if(r[i]==0) r[i]=12; else break; } for(i=0;i<8;i++) //将计算结果存入dsp[9],显示数更新 { dsp[i+1]=r[i]; } }
一般是在程序中附加一节段码表,然后在程序中根据要显示的字符用查表的方法查得段码,然后送到LED数码管的段选端。
1、计数、显示及按键采集用单片机最简单,价格不贵,方便编程。2、数码管显示,要看你选型,有没有''的,我没用过,不知道了。'可以将数码管反过来用dot代,不足的'可用一个led了。呵呵,你也许不用显示'或'',那就更省心了。4、数据管驱动,可选595芯片。5、程序吗,选这个方案再写喽。
楼上设计的挺好,就是分辨率要提高到百分之一秒,因为秒表 在有显示要用液晶 控制操作键最少三个,计时和暂停及继续一个,停止一个,复位一个