历史上的今天
今天是:2025年04月07日(星期一)
2020年04月07日 | 51单片机基础实验例程
2020-04-07 来源:eefocus
代码来源见代码注释。

实验1:点亮第一个LED
/**************************************************************************************
* 点亮第一个LED实验 *
实现现象:下载程序后D1指示灯点亮
注意事项:无
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
sbit led=P2^0; //将单片机的P2.0端口定义为led
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
led=0; //P2.0端口设置为低电平
}
}
实验2:LED闪烁
/**************************************************************************************
* LED闪烁实验 *
实现现象:下载程序后D1指示灯闪烁
注意事项:无
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^0; //将单片机的P2.0端口定义为led
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
led=0;
delay(50000); //大约延时450ms
led=1;
delay(50000); //大约延时450ms
}
}
实验3:LED流水灯
/**************************************************************************************
* LED流水灯实验 *
实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动
注意事项:无
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define led P2 //将P2口定义为led 后面就可以使用led代替P2口 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { u8 i; led=0xfe; delay(50000); //大约延时450ms while(1) { /* for(i=0;i<8;i++) { P2=~(0x01< delay(50000); //大约延时450ms } */ for(i=0;i<7;i++) //将led左移一位 { led=_crol_(led,1); delay(50000); //大约延时450ms } for(i=0;i<7;i++) //将led右移一位 { led=_cror_(led,1); delay(50000); //大约延时450ms } } } 实验4:蜂鸣器 /************************************************************************************** * 蜂鸣器实验 * 实现现象:下载程序后蜂鸣器发声 注意事项:无 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit beep=P1^5; /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { beep=~beep; delay(10); //延时大约100us 通过修改此延时时间达到不同的发声效果 } } 实验5:静态数码管显示 /************************************************************************************** * 静态数码管显示实验 * 实现现象:下载程序后数码管静态显示0。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { LSA=0; LSB=0; LSC=0; //控制38译码器的Y0输出低电平 P0=smgduan[0]; while(1); } 实验6:动态数码管显示 /************************************************************************************** * 动态数码管显示实验 * 实现现象:下载程序后数码管从右至左显示0-7。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 *******************************************************************************/ void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } P0=smgduan[i];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { DigDisplay(); //数码管显示函数 } } 实验7:独立按键 /************************************************************************************** * 独立按键实验 * 实现现象:下载程序后按下K1按键可以对D1小灯状态取反。 注意事项:无 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit k1=P3^1; //定义P31口是k1 sbit led=P2^0; //定义P20口是led /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : keypros * 函数功能 : 按键处理函数,判断按键K1是否按下 *******************************************************************************/ void keypros() { if(k1==0) //检测按键K1是否按下 { delay(1000); //消除抖动 一般大约10ms if(k1==0) //再次判断按键是否按下 { led=~led; //led状态取反 } while(!k1); //检测按键是否松开 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { keypros(); //按键处理函数 } } 实验8:矩阵按键 /************************************************************************************** * 矩阵按键实验 * 实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字 S1-S4:0-3 S5-S8:4-7 S9-S12:8-B S13-S16:C-F。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
上一篇:51单片机闪烁LED灯代码
史海拾趣
|
《嵌入式Linux免费体验班》(1天) 今年5.1放假干嘛去?参加嵌入式Linux免费体验活动! ————————名额有限,限定12人,先报先得! 课程目标: 本课程针对嵌入式Linux开发的初学人员,能快速了解嵌入式Linux系统,了解嵌入式Linux ...… 查看全部问答> |
|
我现在用的是WINCE5.0,一般的FRAMEWORK中有PRINTDIALOG之类的打印类提供,但是在WINCE5.0的FRAMEWORK中没有,现在不知道该如何实现打印,或者是否也可以通过调用API来实现呢. 其中打印机驱动已经提供. 望高人给予指点.谢谢先.… 查看全部问答> |
|
我写了一段STM32低功耗的程序,采用RTC唤醒,但是发现总是不会醒来。而我一旦只要打开了DEBUG,在KEIL 调试时,如果我设置一下或是停止一下断点,就能够醒过来,奇怪: 我的代码如下: /** * @brief Main program. ...… 查看全部问答> |
|
多功能调试测试助手-完整PCB工程包 格式说明:protel99se 需要的朋友可以直接拿去制版,不过要注意器件的封装哦! 一、交流信号发生器(DDS直接频率合成):频率,相位,幅度可控 二、16*64点阵屏人机面板 … 查看全部问答> |
|
玩转MSP-EXP430FR5969 LaunchPad 实用问答! 下面汇总了部分网友在TI 首届低功耗大赛中出现的一些问题。用到FR5969开发板的你如果也遇到一些问题,同时已经解决,请将问题及解决方法跟帖与大家分享,我将会汇总到一楼。 5969的供电出现的一些奇怪现象 https://bbs.eeworld.com.cn/thread-452 ...… 查看全部问答> |




