标题:
一个单片机定时器控制流水灯小程序
[打印本页]
作者:
cyccyccyc
时间:
2018-11-2 17:42
标题:
一个单片机定时器控制流水灯小程序
新人报到!
前段时间自己写了这个小程序,也不知算不算入门,欢迎各位大佬指正。
单片机源程序如下:
#include <reg51.h>
#include "intrins.h"
#include "common.h"
#define FOSC 11059200ul
#define T0_H (65536-(50*FOSC)/(12*1000))/256
#define T0_L (65536-(50*FOSC)/(12*1000))%256
uint16_t i = 0;
uint16_t i1 = 0;
uint16_t i2 = 0;
uint16_t i3 = 0;
bit ayan = 0;
bit byan = 0;
bit cyan = 0;
sbit LED0 = P2^3;
sbit LED1 = P2^4;
sbit LED2 = P2^5;
sbit LED3 = P1^0;
sbit LED4 = P1^1;
sbit LED5 = P1^2;
sbit LED6 = P1^3;
sbit LED7 = P1^4;
sbit LED8 = P1^5;
sbit LED9 = P1^6;
sbit LED10 = P1^7;
sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
uint16_t t=1;
uint16_t t1=0;
void delay_ms(uint16_t dly);
void time();
void main()
{
P1 = 0xfe;
time();
while(1)
{
if(t1==0)
{
delay_ms(1000);
P1 = _crol_(P1,1);
}
if(KEY1 == 0)
{
delay_ms(10);
while(!KEY1);
t=!t;
}
if(t==0)
{
if(ayan)
{
ayan = 0;
LED0 = !LED0;
}
if(byan)
{
byan = 0;
LED1 = !LED1;
}
if(cyan)
{
cyan = 0;
LED2 = !LED2;
}
}
if (t == 1)
{
LED0 = 1;
LED1 = 1;
LED2 = 1;
}
if(!KEY2)
{
delay_ms(10);
while(!KEY2);
t1=!t1;
}
if(t1== 1)
{
delay_ms(1000);
P1 = _cror_(P1,1);
}
}
}
void time(){
TMOD=0x01;
TH0=T0_H;
TL0=T0_L;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 {
TH0 = T0_H;
TL0 = T0_L;
if(++i1 >=10){
i1 = 0;
ayan = 1;
}
if(++i2 >= 20){
i2=0;
byan = 1;
}
if(++i3 >= 100){
i3=0;
cyan = 1;
}
}
void delay_ms(uint16_t dly){
uint8_t i;
while(dly--)
for(i = 110; i > 0; i--);
}
复制代码
所有资料51hei提供下载:
定时器流水灯小程序.zip
(5.13 KB, 下载次数: 16)
2018-11-2 17:39 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1