标题: 51单片机怎么跑秒 [打印本页]
作者: 虚荣心像恶鬼 时间: 2016-11-26 00:20
标题: 51单片机怎么跑秒
最好在程序注释 我有开发板
作者: a0931727149 时间: 2016-11-26 08:32
//自己加上顯示秒數 程式
#include <reg52.h>
#define led_bus P0
#define led_com P1
sbit sw1 = P2^0; //-重置秒數
sbit sw2 = P2^1; //停止計時
char count;
unsigned int sec;
unsigned char T0IntCount;
bit stop;
void Timer0Init(void) //50ms@11.0592MHz
{
TMOD &= 0xF0; //Set timer work mode
TMOD |= 0x01; //Set timer work mode
TL0 = 0x00; //Initial timer value
TH0 = 0x4C; //Initial timer value
TF0 = 0; //Clear TF0 flag
TR0 = 1; //Timer0 start run
ET0=1; //
}
void Timer0Isr(void) interrupt 1
{
TL0 = 0x00; //-重裝初值
TH0 = 0x4C; //-重裝初值
T0IntCount++;
if( T0IntCount > 19) //50 ms * 20 = 1秒
{
T0IntCount=0;
sec++; //秒數遞增
}
}
main()
{
Timer0Init();
EA=1; //中斷總開關開啟
P2=0xff;//設按鍵可讀取
stop=1; //設定可計時
while(1)
{
if(sw1==0) //按鍵判斷
{
count=!count; //清除或計時
}
if(count ==0) //f秒數清除
{
TR0=0;
sec=0;
TL0 = 0x00; //--重裝初值
TH0 = 0x4C; //--重裝初值
}
else //開始計時
{
TR0=1;
}
if(sw2 ==0) //暫停計時
{
stop=!stop;
}
ET0=stop ;
//驅動顯示秒數 .......(視研發板電路撰寫)
}
}
作者: wuyibin2003 时间: 2016-11-26 08:40
定时器中断 要求不高或者用指令延时
作者: zl2168 时间: 2016-11-26 08:54
本帖最后由 zl2168 于 2016-11-26 08:56 编辑
什么叫“跑秒”?经常看到一些自定义且莫名其妙的新名词,是老师教的还是你自己想出来的?
建议用规范术语提问!
作者: fdgdfgfdshfhg 时间: 2016-11-26 11:17
这个参考一下
-
-
0-9999每秒加1计数器.zip
16.8 KB, 下载次数: 10
作者: 不倒翁.WZT 时间: 2016-11-26 12:51
标题: RE: 51单片机怎么跑秒
三位数码管显示秒,无时、分显示,显示较准确。在普中HC6800V3.0板上做过实验,好用。
#include<reg51.h>
#define GPIO_DIG P3
#define GPIO_PLACE P1
unsigned char code DIG_PLACE[3] = {0xfe,0xfd,0xfb};//,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制
unsigned char code DIG_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char DisplayData[8]; //用来存放要显示的8位数的值
unsigned char Time; //用来存放定时时间
unsigned int Second;
/*********************使用数码管显示*******************/
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0; i<8; i++)
{
GPIO_PLACE=DIG_PLACE[i]; //发送位选
GPIO_DIG=DisplayData[i]; //发送段码
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00; //消隐
}
}
/*********************配置定时器************************/
void Timer0init(void)
{
TMOD=0x01; //定时器0选择工作方式1
TH0 =(65536-49550)/256; //设置初始值,定时50MS
TL0 =(65536-49550)%256;
EA =1; //打开总中断
ET0 =1; //打开定时器0中断
TR0 =1; //启动定时器0
}
/**********************主函数***************************/
void main(void)
{
Timer0init();
while(1)
{
DisplayData[0]=DIG_CODE[(Second)/100];
DisplayData[1]=DIG_CODE[(Second)%100/10];
DisplayData[2]=DIG_CODE[(Second)%10];
DigDisplay();
}
}
/*******************定时器0中断函数**********************/
void Timer0() interrupt 1
{
TH0=(65536-49550)/256; //设置初始值
TL0=(65536-49550)%256;
Time++;
if(Time==40) //控制秒时间长短
{
Second++;
Time=0;
}
}
作者: q464488294 时间: 2016-11-26 13:17
三位数码管显示秒,无时、分显示,显示较准确。在普中HC6800V3.0板上做过实验,好用。
#include<reg51.h>
#define GPIO_DIG P3
#define GPIO_PLACE P1
unsigned char code DIG_PLACE[3] = {0xfe,0xfd,0xfb};//,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制
unsigned char code DIG_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char DisplayData[8]; //用来存放要显示的8位数的值
unsigned char Time; //用来存放定时时间
unsigned int Second;
/*********************使用数码管显示*******************/
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0; i<8; i++)
{
GPIO_PLACE=DIG_PLACE[i]; //发送位选
GPIO_DIG=DisplayData[i]; //发送段码
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00; //消隐
}
}
/*********************配置定时器************************/
void Timer0init(void)
{
TMOD=0x01; //定时器0选择工作方式1
TH0 =(65536-49550)/256; //设置初始值,定时50MS
TL0 =(65536-49550)%256;
EA =1; //打开总中断
ET0 =1; //打开定时器0中断
TR0 =1; //启动定时器0
}
/**********************主函数***************************/
void main(void)
{
Timer0init();
while(1)
{
DisplayData[0]=DIG_CODE[(Second)/100];
DisplayData[1]=DIG_CODE[(Second)%100/10];
DisplayData[2]=DIG_CODE[(Second)%10];
DigDisplay();
}
}
/*******************定时器0中断函数**********************/
void Timer0() interrupt 1
{
TH0=(65536-49550)/256; //设置初始值
TL0=(65536-49550)%256;
Time++;
if(Time==40) //控制秒时间长短
{
Second++;
Time=0;
}
}
作者: 常长诀 时间: 2016-11-26 13:38
需要振荡器
作者: zl2168 时间: 2016-11-26 17:33
不需要额外振荡器,单片机本身有振荡器。
作者: zl2168 时间: 2016-11-26 17:34
刚理解什么叫“跑秒”?,原来是秒表。
作者: zl2168 时间: 2016-11-26 17:35
本帖最后由 zl2168 于 2016-11-26 17:36 编辑
实例93 99.9秒秒表
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
若需99.99秒,硬件电路增加一位595。软件程序增加0.01s(10ms)计数器,并修改相应计数显示程序。
作者: 小石头123 时间: 2016-11-26 17:40
定时器中断延时1s就可以了吧
作者: 51dz 时间: 2016-11-26 18:01
三位数码管显示秒,无时、分显示,显示较准确。在普中HC6800V3.0板上做过实验,好用。
#include<reg51.h>
#define GPIO_DIG P3
#define GPIO_PLACE P1
unsigned char code DIG_PLACE[3] = {0xfe,0xfd,0xfb};//,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制
unsigned char code DIG_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char DisplayData[8]; //用来存放要显示的8位数的值
unsigned char Time; //用来存放定时时间
unsigned int Second;
/*********************使用数码管显示*******************/
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0; i<8; i++)
{
GPIO_PLACE=DIG_PLACE[i]; //发送位选
GPIO_DIG=DisplayData[i]; //发送段码
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00; //消隐
}
}
/*********************配置定时器************************/
void Timer0init(void)
{
TMOD=0x01; //定时器0选择工作方式1
TH0 =(65536-49550)/256; //设置初始值,定时50MS
TL0 =(65536-49550)%256;
EA =1; //打开总中断
ET0 =1; //打开定时器0中断
TR0 =1; //启动定时器0
}
/**********************主函数***************************/
void main(void)
{
Timer0init();
while(1)
{
DisplayData[0]=DIG_CODE[(Second)/100];
DisplayData[1]=DIG_CODE[(Second)%100/10];
DisplayData[2]=DIG_CODE[(Second)%10];
DigDisplay();
}
}
/*******************定时器0中断函数**********************/
void Timer0() interrupt 1
{
TH0=(65536-49550)/256; //设置初始值
TL0=(65536-49550)%256;
Time++;
if(Time==40) //控制秒时间长短
{
Second++;
Time=0;
}
}
作者: 流星雨掉到地球 时间: 2016-11-26 18:30
用定时器最好了
作者: 虚荣心像恶鬼 时间: 2016-11-28 19:50
怎么编程啊 按键控制闹钟
-
QQ图片20161128194945.png
(179.73 KB, 下载次数: 87)
作者: 虚荣心像恶鬼 时间: 2016-11-28 20:15
可以看一下程序吗
作者: a123a567l 时间: 2016-11-29 14:19
顶一个
作者: zl2168 时间: 2016-11-29 14:39
程序在书中,自己可去看。
作者: zl2168 时间: 2016-11-29 14:40
本帖最后由 zl2168 于 2016-11-29 14:42 编辑
程序在书中,自己可去看。
秒表案例不难,网上的程序多如牛毛,有什么区别???区别在于电路与程序真实可靠可信可行;在于程序语句条条有注解;在于便于阅读理解,便于自学;在于可以仿真演示,直观效果;在于不忽悠、不骗人。
作者: 飞鸿之梦 时间: 2016-11-29 17:49
用定时计数器
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |