net1234599 MCU DIY 进程贴
先上程序,稍后补上图
1.闪烁灯
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Show_LED = P1^0;
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
P1 = 0xff; //关闭所有LED
while(1)
{
Show_LED = 1;
Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms * del.
Show_LED = 0;
Delay(20);
}
}
2.闪烁灯2
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
P1 = 0xff; //关闭所有LED
while(1)
{
/*下面四行用于控制LED每隔一个亮*/
P1 = 0xaa;
Delay(50);
P1 = 0x55;
Delay(50);
/*下面四行用于控制LED每隔一个亮*/
P1 = 0xcc;
Delay(50);
P1 = 0x33;
Delay(50);
/*下面四行用于控制LED 高四位 或者 低四位亮*/
P1 = 0x0f;
Delay(50);
P1 = 0xf0;
Delay(50);
/*下面八行用于控制LED的两次全亮 全灭*/
P1 = 0x00;
Delay(25);
P1 = 0xff;
Delay(25);
P0 = 0x00;
Delay(25);
P1 = 0xff;
Delay(25);
Delay(200); //延时两秒
}
}
视频地址:http://player.youku.com/player.php/sid/XMzMxOTc0ODg4/v.swf
3.流水灯1
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
P1 = 0x7f; //P1.7亮亮
for(i=0; i<7; i++) //移位7次
{
P1 = _cror_(P1, 1); //_crol_()这个函数在intrins.h中定义了,用于循环右移
Delay(15);
}
P1 = 0xfe;
for(i=0; i<7; i++)
{
P1 = _crol_(P1, 1); //用于循环左移
Delay(15);
}
}
}
视频地址:http://player.youku.com/player.php/sid/XMzMxOTc1MDg0/v.swf
4.流水灯2
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
* 说明 :也可以使用上面的方法来关闭数码管
***********************************************************************/
void Main(void)
{
uchar i, temp;
while(1)
{
temp = 0x7f;
for(i=0; i<7; i++)
{
temp = temp >> 1; //值右移一位
temp = temp | 0x80;
P1 = temp; //把值赋给P1口
Delay(15); //延时0.15秒
}
temp = 0xfe;
for(i=0; i<7; i++)
{
temp = temp << 1; //值左移一位
temp = temp | 0x01;
P1 = temp; //把值赋给P1口
Delay(15); //延时0.15秒
}
}
}
5.数码管显示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY = P3^0; //独立按键的S1
uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*下一行的数组可以显示数值外,还可以显示数码管的点*/
uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
//P2=0xff;
P2=2;
while(1)
{
P0 = table[i % 16]; //在这里取i 的个位数,不带点显示
//P0 = table_d[i % 16]; //带点显示
if(KEY == 0)
{
Delay(1); //软件消抖,试验为20ms
if(KEY == 0)
{
i++;
}
Delay(50); //延时0.5秒后进行下一次的按键检测
}
}
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |