标题:
定时器控制流水灯和数码管
[打印本页]
作者:
ZHANGJINGYU
时间:
2016-12-23 16:50
标题:
定时器控制流水灯和数码管
今天学习51的第二天,刚刚学了定时器,仿照例程写了一个定时器计时控制LED灯的程序,一次性通过然后直接上数码管
效果还不错
声明:板子不是金沙滩工作室的,在数码管显示可能和别的板子有很大的区别
先上图
可惜的是不能上传自己的视频。。
下面贴代码
定时器控制LED亮灭
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED = P1^0;
void main ()
{
uint count = 0;
LED = 0;
TMOD = 0X01;//设置T0为工作模式1
TH0 = 0XB8; //装初值
TL0 = 0X00;
TR0 = 1;//启动T0
while (1)
{
if (TF0 == 1) //判断T0是否溢出
{
TF0 = 0;//T0溢出后,清零
TH0 = 0XB8;//重新装初值
TL0 = 0X00;
count ++;
if (count == 10) //判断T0是否溢出达到10次,即计时200ms
{
count = 0;
LED = ~LED;
}
}
}
}
复制代码
定时器控制数码管
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define SHUMAGUAN P0
sbit dula = P2^6;
sbit wela = P2^7;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //数码管显示编码(1-F)
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void show_shumaguan ( i )
{
dula = 0; //开段选
SHUMAGUAN = table[i];//送数据
dula = 1;
dula = 0;
wela = 0; //开位选
SHUMAGUAN = 0x00;
wela = 1;
wela = 0;
}
void main()
{
uint count = 0;
uint i = 0;
TMOD = 0X01;//选择工作方式为1
TH0 = 0XB8;//装初值,定时20ms
TL0 = 0X00;
TR0 = 1;//启动T0
while (1)
{
if (TF0 == 1)//判断T0是否溢出
{
TF0 = 0;//重装初值
TH0 = 0XB8;
TL0 = 0X00;
count ++;
if (count == 10)//判断计时到达500ms
{
show_shumaguan(i);
i ++;
if ( i == 16 )
i = 0;
count = 0;
}
}
}
}
复制代码
大神路过别笑!毕竟新手!还望鼓励!谢谢!
IMG_20161223_164220.jpg
(1.98 MB, 下载次数: 94)
下载附件
2016-12-23 16:47 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1