51单片机十秒简易计时器
修改如下:#include#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};sbit key1=P2^7;sbit key2=P2^6;sbit weiH=P3^0;sbit weiM=P3^1;sbit weiL=P3^2;uint num=0,ge=0,shi=0,fen=0,k; //num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)//i=xms即延时约xms毫秒for(j=110;j>0;j--);}uchar key1scan(void){if(key1==0){delayms(10);if(key1==0){while(!key1);return 1;}return 0;}uchar key2scan(void){if(key2==0){delayms(10);if(key2==0){while(!key2);return 1;}}return 0;}void showtime() interrupt 1//时间显示{TH0=(65536-5000)/256;TL0=(65536-5000)%256;num++;num%=3;switch(num){case 0:weiL=1; //显示秒的个位P1=0xff;P1=table[ge];delayms(5);weiL=0;break;case 1:weiM=1; //显示秒的十位P1=0xff;P1=table[shi];delayms(5);weiM=0;break;case 2:weiH=1; //显示分钟,只显示0-9P1=0xff;P1=table[fen];delayms(5);weiH=0;break;}void main(){TMOD=0x01;TH0=(65536-5000)/256;TL0=(65536-5000)%256;TR0=1;ET0=1;EA=1;num=0;while(1) {if((key1scan()==1)&&(key2scan()!=1))break; //按键1按下,按键2未按下开始计时 }while(1) { delay(1000); ge++; if(ge>9) { ge=0; shi++ if(shi>5) { fen++; if(fen>9)fen=0; } } showtime(); }}
因为楼主说,(不要太大面积修改)。所以,就没有敢进行大面积的修改。
只简单的改改,未必能好用,仅供参考:
#include<reg51.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};
sbit key1=P2^7;
sbit key2=P2^6;
sbit weiH=P3^0;
sbit weiM=P3^1;
sbit weiL=P3^2;
uint num=0,ge=0,shi=0,fen=0,k;
//num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示
void delayms(uint xms) //i=xms即延时约xms毫秒
{
uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
uchar key1scan()
{
if(key1==0) {
delayms(10);
if(key1==0) {
while(!key1) showtime();//等待释放期间,也进行显示
return 1;
}
}
return 0;//添上了返回值
}
uchar key2scan()
{
if(key2==0) {
delayms(10);
if(key2==0) {
while(!key2) showtime();
return 1;
}
}
return 0;//添上了返回值
}
void showtime() //时间显示
{
//这里去掉了while(1) ,避免了死循环
P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;//显示秒的个位
P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;//显示秒的十位
P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;//显示分钟,
}
51单片机十秒简易计时器
P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;\/\/显示秒的个位 P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;\/\/显示秒的十位 P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;\/\/显示分钟,}
单片机十秒倒计时实验报告目的是什么
1、根据查询百度文库信息显示,单片机十秒倒计时实验报告的目的如下:培养学生对单片机的学习兴趣,提高动手能力。2、掌握单片机定时器\/计数器的工作原理和应用。3、掌握单片机编程语言(如C语言)的基本语法和程序结构。4、理解并掌握单片机在现实生活中的应用。5、通过实验,让学生了解单片机在实际应用中的...
求单片机简易数字钟的课程设计 :要求自制一个单片机最小系统,包括串口...
void display1(minute10,minute1,second10,second1) \/\/显示第一页 分秒 子程序 \/\/unsigned char second10,second1,minute10,minute1; { P2=0x08; P0=dispcode[second1];\/\/显示秒的个位 delay(1); P2=0x04; P0=dispcode[second10]; \/\/显示秒的十位 delay(1); P2=0x02; P0=dispcode[minute1];...
编写一个延时10秒的程序单片机
如果是精确的话,需要用定时器,不是太精确的话,软件延时就可以。假如12M晶振 void delay10s(){ int i,j;for(i=0;i<10000;i++)for(j=0;j<120;j++);} void delay10s(){ unsigned char i;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;TR0=1;i=200;while(i--){ wh...
如何用单片机做一个简单的倒计时器
51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。初值,换算成十六进制,高位给TH0,低位...
使用8051单片机设计实现一个秒表
这个单片机秒表应用是比较简单的,主要是计时器的控制。
设计一个单片机编程,两位的简易秒表,记时单位60-50s,用两位的数码管_百...
void ConfigTimer0(){ TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;ET0 = 1;TR0= 1;EA = 1;} void main(){ ConfigTimer0();while(1){ P0 = ledchar[sec\/10];P2 = ledchar[sec%10];} } void Timer0() interrupt 1 { static unsigend int t = 0;TH0 = 0xFC;TL0 = 0x18;...
51单片机定时十秒编程
DQ = 0; \/\/单片机将DQ拉低 tmpDelay(80); \/\/精确延时 大于 480us DQ = 1; \/\/拉高总线 tmpDelay(14);x=DQ; \/\/稍做延时后 如果x=0则初始化成功 x=1则初始化失败 tmpDelay(20);} unsigned char ReadOneChar()\/\/读一个字节 { unsigned char i=0;unsigned char dat = 0;...
设计一个单片机秒表,该秒表可显示0.0到59.9秒的时间
p[1]=i\/10;p[2]=i%10;} void main(void){ EA=1; IT1=1; ET0=1;TMOD=0x01; \/\/T0方式1计时0.01秒 TH0=65536-5000\/256;TL0=65536-5000%256;TR0=1; \/\/开中断,启动定时器 while(1){ Process(TIME,Data);Display(Data);if(TIME>599){ TIME=0;} } } \/* 定时计数器0...
求一个简单的单片机时钟程序
disdat[1]=sec\/10;disdat[2]=min%10;disdat[3]=min\/10;disdat[4]=hour%10;disdat[5]=hour\/10;}void t0isr() interrupt 1\/\/秒计时{TR0=0;TH0=0x3c;TL0=0xb0;TR0=1;time++;if(time==20){time=0;sec++;if(sec>59){sec=0;min++;if(min>59){min=0;hour++;if(...
佴虏壮筋: 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...
庆城县13078036393: 51单片机:写一个10s的秒表程序,用一个按键分别控制秒表启动、停止、清零.(要求:使用定时器1定时,定时20中断一次)问题就在开关上,谁能给我说怎么处理 最好有代码 10 - ?
佴虏壮筋: 设立一个标志变量,初始化时,变量=0.定时器中断函数写成若标志变量为1则time++启动过程:扫描按键,若扫到,去抖延时,若扫到,标志变量取反.停止过程:同上.清零:扫描按键,若扫到,去抖延时,若扫到,且标志变量为0(停止状态),再循环扫描按键几个来回,具体时间可以用for来控制,目的就是实现一个长按清零.直接求代码很无聊,要自己写出来,做出来,才能体会到成功的酸爽.难点在长按与短按的区分,加油.
庆城县13078036393: 用51单片机做秒表,按键按下停止计时,再按一次接着计时 - ?
佴虏壮筋: 让定时器停止计时,只要TRx = 0这句就行,要让它继续,再TRx = 1; 例如,我的按键是P0.0,按一下停止,按一下继续,用定时器0,可以这样写:if(P0_0 == 0) {TR0 = ~TR0;while(P0_0 == 0); } 我只是提供个例子,实际运用中按键要记得加滤波
庆城县13078036393: AT89C51单片机设计一个简易秒表? - ?
佴虏壮筋: 定时器10ms中断 检测按键且10ms位加一 若10ms=10,100ms位加一 若10ms=10,1000ms位加一 以此内推 显示最好用LCD的 用数码管的也行 有疑问mail:290765583@163.com
庆城县13078036393: 51单片机完成简易秒表的设计 - ?
佴虏壮筋: 设计思路:1.定时器计时 设置秒表最小单位(如ms)设置定时器的寄存器初始值,定时器溢出显示等.2.键盘扫描 可设置中断也可直接键盘扫描,因键较少可以不必接成矩阵.可以只用三个键来实现. 键1:功能选择,包括功能设置、准备计时等 键2:计时开始,向上调整时间 键3:计时停止,向下调整时间3.显示 看单片机引脚多少,可以直接静态显示,可以用移位寄存器增加管脚功能.
庆城县13078036393: 用51单片机设计一个秒表,计时范围从00:00 - 59:59. - ?
佴虏壮筋: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ...
庆城县13078036393: 急~51单片机10毫秒秒表制作~在线等! - ?
佴虏壮筋: #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...
庆城县13078036393: 单片机AT89C51倒计时器10秒倒计时,时间到八盏灯闪的程序 - ?
佴虏壮筋: #include<reg52.h> #include <intrins.h> #define uint unsigned int#define uchar unsigned charuchar temp,num,num1; sbit duan=P2^6; sbit beep=P2^2; void delay(uint); void main() { uchar temp=0xfe; P0=0x00; duan=1; duan=0; D=0; while(1) { for(...
庆城县13078036393: 用51单片机做定时器,时间显示在数码管上,要求有秒钟十秒钟分钟十分钟,四个数码管,程序一开始就直接 - ?
佴虏壮筋: ............这不是最简单的吗?用单片机的定时器设置成50ms中断一次,然后20次就是1秒,秒到了60,然后把秒变成0,分钟加1,数码管你看看是用什么控制138加595,还是数码管芯片直接驱动
庆城县13078036393: 如何利用51单片机实现一个计时器? - ?
佴虏壮筋: 方法一:用定时器中断计时模式循环计时.方法二:用CPU消耗时钟周期指令计时(浪费资源).思路:用定时器中断计时,溢出时形成中断信号,标识为一个基本周期t,所定时间T/t=n为周期循环数,到时形成定时触发信号.