当前位置:首页 > 经验 >

单片机实战100例详解合集(单片机编程实例全集)

来源:原点资讯(m.360kss.com)时间:2023-10-25 06:37:40作者:YD166手机阅读>>

} 15 K1-K4 控制数码管加减演示 /* 名称:K1-K4 控制数码管加减演示 说明:按下 K1 后加 1 计数,按下 K2 后减 1 计数,按下 K3 后清零。 */

#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //段码 uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //待显示的 3 位缓冲 uchar Num_Buffer[]={0,0,0}; //按键代码,按键计数 uchar Key_Code,Key_Counts=0; //延时 void DelayMS(uint x) {uchar i; while(x--) for(i=0;i<120;i ); } //显示函数 void Show_Counts_ON_DSY() { uchar i,j=0x01; Num_Buffer[2]=Key_Counts/100; Num_Buffer[1]=Key_Counts/10; Num_Buffer[0]=Key_Counts; for(i=0;i<3;i ) { j=_cror_(j,1); P0=0xff; P0=DSY_CODE[Num_Buffer[i]]; P2=j; DelayMS(1); } } //主程序 void main() { uchar i; P0=0xff; P1=0xff; P2=0x00; Key_Code=0xff; while(1) { Show_Counts_ON_DSY(); P1=0xff; Key_Code=P1; //有键按下时,数码管刷新显示 30 次,该行代码同时起到延时作用 if(Key_Code!=0xff) for(i=0;i<30;i ) Show_Counts_ON_DSY(); switch(Key_Code) { case 0xfe: case 0xfd: case 0xfb: if(Key_Counts<255) Key_Counts ; break; if(Key_Counts>0) Key_Counts--; break; Key_Counts=0; } Key_Code=0xff; }

}

16 4X4 矩阵键盘控制条形 LED 显示

单片机实战100例详解合集,单片机编程实例全集(13)

/* 名称:4X4 矩阵键盘控制条形 LED 显示 说明:运行本例时,按 下的按键值越大点亮的 LED 越多。 */ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //矩阵键盘按键特征码表 uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21, 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88}; //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i<120;i ); } //键盘扫描 uchar Keys_Scan() { uchar sCode,kCode,i,k; //低 4 位置 0,放入 4 行 P1=0xf0; //若高 4 位出现 0,则有键按下 if((P1&0xf0)!=0xf0) { DelayMS(2); if((P1&0xf0)!=0xf0) { sCode=0xfe; //行扫描码初值 for(k=0;k<4;k ) //对 4 行分别进行扫描 { P1=sCode; if((P1&0xf0)!=0xf0) { kCode=~P1; for(i=0;i<16;i ) //查表得到按键序号并返回 if(kCode==KeyCodeTable[i]) return(i); } else sCode=_crol_(sCode,1); } } } return(-1); } //主程序 void main() { uchar i,P2_LED,P3_LED; uchar KeyNo=-1; //按键序号,-1 表示无按键 while(1) { KeyNo=Keys_Scan(); //扫描键盘获取按键序号 KeyNo if(KeyNo!=-1) { P2_LED=0xff; P3_LED=0xff; for(i=0;i<=KeyNo;i ) //键值越大,点亮的 LED 越多 { if(i<8) P3_LED>>=1; else P2_LED>>=1; } P3=P3_LED; //点亮条形 LED P2=P2_LED; }

单片机实战100例详解合集,单片机编程实例全集(14)

} }

17 数码管显示 4X4 矩阵键盘按

键号 /* 名称:数码管显示 4X4 矩阵键盘按键号 说明:按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。 */

#include<reg51.h> #define uchar unsigned char #define uint unsigned int //段码 uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00}; sbit BEEP=P3^7; //上次按键和当前按键的序号,该矩阵中序号范围 0~15,16 表示无按键 uchar Pre_KeyNo=16,KeyNo=16; //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i<120;i ); } //矩阵键盘扫描 void Keys_Scan() { uchar Tmp; P1=0x0f; //高 4 位置 0,放入 4 行 DelayMS(1); Tmp=P1^0x0f;//按键后 0f 变成 0000XXXX,X 中一个为 0,3 个仍为 1,通过异或把 3 个 1 变为 0,唯一的 0 变为 1 switch(Tmp) //判断按键发生于 0~3 列的哪一列 { case 1: KeyNo=0;break; case 2: KeyNo=1;break; case 4: KeyNo=2;break; case 8: KeyNo=3;break; default:KeyNo=16; //无键按下 } P1=0xf0; //低 4 位置 0,放入 4 列 DelayMS(1); Tmp=P1>>4^0x0f;//按键后 f0 变成 XXXX0000,X 中有 1 个为 0,三个仍为 1;高 4 位转移到低 4 位并 异或得到改变的值 switch(Tmp) //对 0~3 行分别附加起始值 0,4,8,12 { case 1: KeyNo =0;break; case 2: KeyNo =4;break; case 4: KeyNo =8;break; case 8: KeyNo =12; } } //蜂鸣器 void Beep() { uchar i; for(i=0;i<100;i ) { DelayMS(1); BEEP=~BEEP; } BEEP=0; } //主程序 void main() { P0=0x00; BEEP=0; while(1) { P1=0xf0; if(P1!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) { P0=~DSY_CODE[KeyNo]; Beep(); Pre_KeyNo=KeyNo; } DelayMS(100); } }

18 开关控制 LED

单片机实战100例详解合集,单片机编程实例全集(15)

/* 名称:开关控制 LED 说明:开关 S1 和 S2 分别控 · LED1 和 LED2。 */ #include<reg51.h> sbit S1=P1^0; sbit S2=P1^1; sbit LED1=P0^0; sbit LED2=P0^1; //主程序 void main() { while(1) { LED1=S1; LED2=S2; }

单片机实战100例详解合集,单片机编程实例全集(16)

栏目热文

51单片机指令详解(51单片机基础代码详解)

51单片机指令详解(51单片机基础代码详解)

为了加深初学者对51单片机指令的理解,现在把指令执行的过程在此详细说明,希望对你有启发!单片机执行程序的过程,实际上就是...

2023-10-25 06:33:18查看全文 >>

最好的51单片机教程(51单片机学习推荐)

最好的51单片机教程(51单片机学习推荐)

单片机入门51单片机是最好的选择。很多人可能以为51单片机已经过时了,能这么想的绝对是没实际产品开发经验的。51最大的优...

2023-10-25 06:04:26查看全文 >>

51单片机文字教程(51单片机怎么弄中文版)

51单片机文字教程(51单片机怎么弄中文版)

点阵显示实验一、什么是点阵?我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办呢...

2023-10-25 05:54:11查看全文 >>

51单片机教程零基础入门(零基础51单片机自学教程)

51单片机教程零基础入门(零基础51单片机自学教程)

大学四年白混了四年,如今要毕业了。学习单片机。也算是工作前的准备。单片机对于工科类的学生来说真的很重要,这点到现在才明...

2023-10-25 06:18:37查看全文 >>

51单片机入门自学(51编程入门教程)

51单片机入门自学(51编程入门教程)

曾经我是自学单片机然后跨行成功,今天来分享下自己的经验。在网上看了很多文章,很多人说现在51单片机已经过时了,建议从ST...

2023-10-25 06:15:13查看全文 >>

51单片机制作教程入门(51单片机入门最好教程)

51单片机制作教程入门(51单片机入门最好教程)

本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了。下面是内容正文单片机学习的第一步,什么是单片机最小系统?...

2023-10-25 06:04:12查看全文 >>

自学单片机的亲身经历(零基础从哪里开始学单片机)

自学单片机的亲身经历(零基础从哪里开始学单片机)

大家好,我是无际单片机编程徐工。最近有部分学员陆陆续续开始找工作了,在此分享下我第一份工作的经历。更详细的面试经验和技巧...

2023-10-25 06:18:49查看全文 >>

51单片机从零开始学(51编程入门自学100例)

51单片机从零开始学(51编程入门自学100例)

本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了。下面是内容正文单片机学习的第一步,什么是单片机最小系统?...

2023-10-25 06:30:01查看全文 >>

51单片机入门(51单片机入门书本推荐)

51单片机入门(51单片机入门书本推荐)

本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了。下面是内容正文单片机学习的第一步,什么是单片机最小系统?...

2023-10-25 06:17:29查看全文 >>

手把手学习51单片机(新人如何学习51单片机)

手把手学习51单片机(新人如何学习51单片机)

本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了。下面是内容正文单片机学习的第一步,什么是单片机最小系统?...

2023-10-25 06:24:40查看全文 >>

文档排行