蓝桥杯——单片机学习(学习自检——流水灯)

就是学习别人的博客,然后看看自己能独立打出来不。本来应该删掉的,可是毕竟是自己辛辛苦苦打出来的,舍不得 orz.

代码

(我的)

//led.c

#include "sys.h"

void LED_disp(u8 led){
	P0 = led;
	P2 = P2 & 0x1F | 0X80;
	P2 &= 0x1F;
}

//tim.c

#include "sys.h"

void ALL_Init(void){
	P0 = 0xFF;
	P2 = P2 & 0x1F | 0x80;       //关闭LED
	P2 = P2 & 0x1F | 0xE0;       //关闭数码管
	P2 &= 0x1F;
	
	P0 = 0;
	P2 |= 0xA0;                  //关闭蜂鸣器
	P2 &= 0x1F;
}

void Timer0Init(void){               //1ms@12.000MHz
	AUXR &= 0x7F;                      //12分频
	TMOD &= 0xF0;                      //配置为定时器0模式
	TH0 = (65536 - 1000)/256;          //0XFC
	TL0 = (65536 - 1000)%256;          //0X18
	TR0 = 1;                           //定时器开始计数
	TF0 = 0;                           //溢出标志位清零
	ET0 = 1;                           //运行定时器0中断
	EA = 1;                            //开启总中断
}

void Timer0_handle(void) interrupt 1{
	static u16 t;
	if(++t == 1000){
		led = _cror_(led,1);
		t = 0;
	}
}

//sys.h

#ifndef __SYS_H_
#define __SYS_H_

#include <stdio.h>
#include <STC15F2K60S2.H>
#include <intrins.h>

#ifndef u8
#define u8 unsigned char
#endif

#ifndef u16
#define u16 unsigned int
#endif

extern u8 led;

//led.c
void LED_disp(u8 led);

//tim.c
void ALL_Init(void);
void Timer0Init(void);

#endif

//main.c

//流水灯

#include "sys.h"
#include <stdio.h>
#include <STC15F2K60S2.H>

u8 led = 0xEF;

void main(){
	ALL_Init();
	Timer0Init();
	while(1){
		LED_disp(led);
	}

}

学习博客

@小默 haa—— 流水灯

问题

1、定时器不会写,没有背里面的各个参数,但是我会用!
(好吧,还是去背下吧,不然考试就gg了。)
2、intrins.h 不记得,去背去背!!!
3、_cror_函数的使用,也是忘记了这前后两条横线了,现在记住啦!
4、AUXR |= 0x80; 是1分频模式,1分频时,TL0和TH0里的参数要乘上12。
5、在头文件写了全局变量声明的,在main.c文件里一定要把那些相对应的变量写在main函数外面,作为全局变量。
6、TF0是溢出标志位,要清零;TR0是计数允许位,要置一。不要记混了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moqim Flourite.

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值