C51 单片机简单实例

这篇博客详细介绍了C51单片机的多个实例,包括独立按键LED显示、流水灯控制、按键计数、数码管显示及按键矩阵扫描等。每个实例都包含了电路设计和程序代码,讲解了单片机的晶振、复位以及I/O口的使用技巧。适合初学者深入理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例一

独立按键,要求按下一个按键,显示一个 LED 灯。

电路

在这里插入图片描述
其中 P0 由于工作在 I/O 方式时,其内部是漏极开路状态,因此,需要外接上拉电阻,其值大约为 10kΩ 。

对于 LED 而言,这里采用的是高电平驱动(听说很常用,也有低电平驱动的)。为了限制电流,一般需要外接一个 100~200 Ω 的限流电阻。

代码

#include<reg51.h>
void main(){
   
	char key;
	P2 = 0X00;
 	while(1){
   
		key = ~P0 & 0X0F;
	 	if(key!=0X00){
   
			P2 = key;	
		}
	}
}

注意,在仿真的时候,记得要先要在 proteus 点击暂停,来 stop running,之后再在 Keil 停止仿真即可结束仿真,否则无法关闭或卡死。

实例二

流水灯。要求按下 K1 时,流水灯自上往下开启。按下 K2 时,流水灯停止。按下 K3 时,流水灯至上往下;按 K4 则流水灯自下往上显示。

电路

同上

程序

#include<reg51.h>
unsigned char code led[] = {
   0x01,0x02,0x04,0x08};
void delay(unsigned char time){
   
	unsigned char tmp = 125;
	for(;time>0;time--)
		for(;tmp>0;tmp--);
}
void main(){
   
	
	bit run=0,flag=0;
	unsigned char i = 0;
	P2 = 0X00;
	while(1){
   
		switch(~P0&0x0f){
   
			case 0x01:run=1;break;
			case 0x02:run=0;flag=0;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhuo木鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值