单片机入门实验大全

1.动态数码管

注意:每个数码管后都要加上: P1 = 0x00; 进行消影,不然会有重影。

#include <reg52.h>

sbit led1 = P1^3;
sbit led2 = P1^2;
sbit led3 = P1^1;
sbit led4 = P1^0;

unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay3ms(void)   //?? 0us
{
    unsigned char a,b;
    for(b=111;b>0;b--)
        for(a=12;a>0;a--);
}

void main()
{
		P1 = 0x00;
		
		P0 = table[1];
		led1 = 1;
		delay3ms();
		P1 = 0x00;
		
		P0 = table[2];
		led2 = 1;
		delay3ms();
		P1 = 0x00;
		
		P0 = table[3];
		led3 = 1;
		delay3ms();
		P1 = 0x00;

		P0 = table[4];
		led4 = 1;
		delay3ms();
		P1 = 0x00;

	
}

独立按键:按下键从1递增至8

//	¶ÀÁ¢°´¼ü£º×¢ÒâÏû¶¶£¬°´ÏÂÏû¶¶£¬ËÉ¿ªÒ²Ïû¶¶

#include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;

sbit key1 = P1^4;
sbit led1 = P2^0;
sbit wei = P1^3;
uint num;

unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay10ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}


void main()
{
	P1 = 0xf0;
	wei = 1;
	num = 1;
	P0 = table[num];
	while(1)
	{
		if(key1 == 0){
			delay10ms();
			if(key1 == 0){
				num++;
				if(num>=9)	num = 1;
				while(key1);
				delay10ms();
				while(!key1);
			}
		}
		P0 = table[num];
		
	}
}

矩阵键盘

//	独立按键:注意消抖,按下消抖,松开也消抖

#include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
#define KEY_C P1;
uint num;
uchar keyvalue = 0;
uint a = 0;
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay10ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void key_down();

void main()
{
	 while(1){
		key_down();
		P0 = ~table[keyvalue];
	 }	
}

void key_down(){
	//高四位0,低四位1
	P1 = 0x0f;
	if(P1!=0x0f){
		//	去抖动
		delay10ms(); 
		if(P1!=0x0f){
			switch(P1){
				case(0x07):keyvalue=0;break;
				case(0x0b):keyvalue=1;break;
				case(0x0d):keyvalue=2;break;
				case(0x0e):keyvalue=3;break;
			}
			
			P1 = 0xf0;
			switch(P1){
				case(0x70):keyvalue=keyvalue;break;
				case(0xb0):keyvalue=keyvalue+4;break;
				case(0xd0):keyvalue=keyvalue+8;break;
				case(0xe0):keyvalue=keyvalue+12;break;
			}
			while(a<50&&P1!=0xf0){
				delay10ms();
				a++;
			}
		}
	}
	
}

蜂鸣器


#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;
sbit beep = P1^1;


void delay(uint i)   //误差 0us
{
   while(i--);
}


void main()
{
	 while(1){
		beep = ~beep;
		delay(12);
		 beep = ~beep;
		delay(3);
	 }
}


1602显示

#include <reg52.h>
#define uchar unsigned char

//typedef unsigned char uchar;
typedef unsigned int uint;

// 待打印的字符集
uchar code table[] = "Hello MCU!";
uchar code table1[] = "WWW.KIM.COM";

sbit en = P2^7;
sbit rs = P2^6;
sbit rw = P2^5;



void delay(uint z){
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

void write_com(uchar com){
	rs = 0;//	写指令
	P0 = com;
	delay(5);
	//	高脉冲瞬间读入
	en = 1;
	en = 0;
}

void init(){
	rw = 0;
	en =0;
	//	使能端为0,写指令
	write_com(0x38);//	设置显示方式
	write_com(0x0c);//	开显示,包括光标和闪烁
	write_com(0x06);//	写一个字符后,地址指针自动加一
	write_com(0x01);//	显示请0,数据指针清0
}

void write_data(uchar date){
	rs = 1;
	P0 = date;
	delay(5);
	en = 1;
	en = 0;
}

void main(){
	uchar num = 0;
	init();
	write_com(0x80);
	for(num=0;num<10;num++){
		write_data(table[num]);
		delay(5);
	}
	write_com(0x80+0x40);
	for(num=0;num<11;num++){
		write_data(table1[num]);
		delay(5);
	}
	while(1);
}




直流电机控制

#include <reg52.h>

sbit moto1 = P1^0;
sbit moto2 = P1^2;

void delay3s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=189;c>0;c--)
        for(b=230;b>0;b--)
            for(a=33;a>0;a--);
}

void main(){
	while(1){
		moto1 = 0;
		moto1 = 1;
		delay3s();
		moto1 = 0;
		delay3s();
	}
}
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值