點亮一個LED燈
首先找到單片機的原理圖,找到LED模塊。我這里是P2口是連接了LED燈,通過此原理圖我們可以看到
我們只需將單片機的IO口置為低電平,就可以點亮LED燈。
因為代碼比較簡單,我就分別展示一下代碼,一顆LED燈的亮滅,流水燈
延時函數(shù)可以通過小工具來實現(xiàn),選擇好系統(tǒng)的頻率,以及定時長度和指令集
單片機延時函數(shù)為,這里我是通過上面的延時1ms的代碼改的
創(chuàng)建文件delay.c和delay.h將這個函數(shù)放到這里面,以便于后面的使用
delay.c文件
#include "delay.h"
#include "reg52.h"
#include "intrins.h"
void Delay1ms(unsigned int time) //@11.0592MHz
{
unsigned char i, j;
unsigned int k;
for(k = 0;k < time;k++)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
delay.h文件
#ifndef __DELAY_H
#define __DELAY_H
void Delay1ms(unsigned int time); //@11.0592MHz
#endif
一顆LED燈閃爍代碼,main.c
#include "reg52.h"
#include "intrins.h"
#include "delay.h"
sbit LED1 = P2^0; //位操作,將單片機寄存器的P2_0定義為LED1
#define LED_PORT P2 //將所有的LED燈所在的P2口定義為LED
void main(void)
{
while(1)
{
LED1 = 0; //點亮一顆LED燈
Delay1ms(100);
LED1 = 1; //點亮一顆LED燈
Delay1ms(100);
}
}
八個LED向左燈依次點亮,之后向右重復
void LED_Light(void)
void LED_Light(void)
{
LED_PORT = 0X01;
while(1)
{
LED_PORT = ~LED_PORT ;
for (i = 0; i < 8; i++)
{
LED_PORT = LED_PORT <<i;
Delay1ms(100);
}
LED_PORT = ~LED_PORT ;
for (i = 0; i < 8; i++)
{
LED_PORT = LED_PORT >>i;
Delay1ms(100);
}
}
}
LED燈單個循環(huán)循環(huán)左移之后循環(huán)右移,,這里的左移_crol_,右移_cror_是c51庫函數(shù),分別代表循環(huán)左移,和循環(huán)右移,參數(shù)分別是需要移動的數(shù)據(jù)以及每次移動的位數(shù)。
void LED_Waterfall(void)
{
LED_PORT = ~0x01;
while(1)
{
for (i = 0; i < 7; i++)
{
LED_PORT = _crol_(LED_PORT,1);
Delay1ms(500);
}
for (i = 0; i < 7; i++)
{
LED_PORT = _cror_(LED_PORT,1);
Delay1ms(500);
}
}
}
以上代碼就是LED的基本代碼介紹,其他的操作也可以根據(jù)這上面來改動
按鍵控制LED燈
該款單片機有四個獨立按鍵,分別接到P31,P30,P32,P33,當按鍵按下時接口會呈現(xiàn)低電平,通過讀取IO口電平數(shù)據(jù),可以檢測是否有按鍵按下。
按鍵K1控制LED燈的開關
void KEY_SCAN(void)
{
if(KEY1 == 0)
{
while(KEY1 == 0);
LED_PORT = ~LED_PORT;
}
}
按鍵K1和按鍵K2控制單個LED左右移動文章來源:http://www.zghlxwxcb.cn/news/detail-481109.html
void KEY_LED_CONTROL(void)
{
unsigned char num = 0;
while(1)
{
if(KEY1 == 0)
{
Delay1ms(20);
while(KEY1 == 0);
Delay1ms(20);
LED_PORT = ~(0x01<<num);
num++;
if(num == 8) num = 0;
}
else if(KEY2 == 0)
{
Delay1ms(20);
while(KEY2 == 0);
Delay1ms(20);
if(num == 0) num = 7;
num--;
LED_PORT = ~(0x01<<num);
}
}
}
以上就是獨立按鍵檢測的基本代碼,其他功能也是這個原理文章來源地址http://www.zghlxwxcb.cn/news/detail-481109.html
到了這里,關于一周學完C51單片機(1)點亮LED燈以及按鍵控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!