|
今天学习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;
- }
- }
- }
- }
复制代码
大神路过别笑!毕竟新手!还望鼓励!谢谢!
|
|