1.   单片机驱动蜂鸣器的实验;

a)         说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.5

b)        基本要求:控制蜂鸣器每2秒响0.5秒。

#include <reg51.h>

#define unit unsigned int

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

void main()

{

){

P1=0x00;

delay);   //0.5秒

P1=0xff;

delay);//2秒

}

}

2.  单片机驱动继电器输出实验;

a)         说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.4

b)        基本要求:控制继电器每5秒吸合0.5秒。

#include <reg51.h>

#define unit unsigned int

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

sbit JiDian;

void main()

{

){

JiDian=0x00;

delay);   //0.5秒

JiDian=0xff;

delay);//2秒

}

}

3.延时实现p2口LED流水灯效果(用循环移位指令)

#include <reg51.h>

#define unit unsigned int

unit table[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

void main()

{

int i;

P2=0x00;

){

;i++){

P2=table[i];

delay);//2秒

}

}

}

4.p2口八个灯作二进制加法。理解二进值的计算

#include<reg51.h>

#define unit unsigned int

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

void main(){

){

P2=0xff;

while(P2!=0x00){

P2++;

delay);//2秒

}

}

}

5.直接用IO口做位选信号,控制8位数码管上显示1,2,3,4…F,循环显示

说明:P0是位选,P2是段选

#include <reg51.H>

#define unit unsigned int

unit code NumTable[]={0x06,~0x24,~0x30,~0x19,~0x12,~0x02,0x87,0xff,~0x10};

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

void DisplayNumByOrder(unit DelayNum){

int i;

;i++){

P0=NumTable[i];

delay(DelayNum);//2秒

}

}

void main(){

//P0是段选,P2是位选

P2=0x00;

){

DisplayNumByOrder);

}

}

6.用译码器138做片选信号,控制4位数码管上做加1显示。从0000开始.

说明:JP15与JP16 用8个短路冒连接,JP10 (P0)与J12 用8PIN排线连接

#include <reg51.h>

#include <math.h>

#define unit unsigned int

unit code NumTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数字的编码

做位选信号,控制4位数码管上做加1显示。从0000开始.

void delay_1ms(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

/**

在数码管上显示对应的值

**/

void display(unsignedchar k)

{

P0=NumTable[k];

delay_1ms);

}

sbit high;

sbit mid;

sbit low;

/**

位,并分解计数值

**/

void DisplayNumByOrder(unit Count,unit delay_1msNum){

low);

low);

low);

low);

low);

low);

low);

low);

}

//一个是位选,一个是段选

void main(){

;

){

count++;

DisplayNumByOrder);

;

}

}

7.利用动态扫描方法在八位数码管上显示出稳定的87654321.

#include <reg51.h>

#define unit unsigned int

unit table[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};

unit code NumTable[]={0x06,~0x24,~0x30,~0x19,~0x12,~0x02,0x87,0xff,~0x10};

void delay(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

void DisplayNumByOrder(unit DelayNum){

int i;

;i++){

P0=NumTable[i];

P2=table[i];

delay(DelayNum);//5ms

}

}

//一个是位选,一个是段选

void main(){

//P0是位选,P2是段选

//P2=0x00;

){

DisplayNumByOrder);

}

}

8.  数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。

#include <reg51.h>

#define unit unsigned int

unit code NumTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数字的编码

到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。

sbit high;

sbit mid;

sbit low;

sbit IsCountKey;//是否计数的按键

的时候暂停

//监测

void delay_1ms(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

/**

在数码管上显示对应的值

**/

void display(unsignedchar Num)

{

P0=NumTable[Num];

delay_1ms);

P0;      //送完段选信号后,进行消影的处理

}

/**

位,并分解计数值

**/

void DisplayNumByOrder(unit Count){

low);

low);

low);

low);

low);

low);

low);

low);

}

//是否计数

void IsCount(unit count){

if(PRESSED==IsCountKey){    //当按键按下

delay_1ms);       //去抖动

if(PRESSED==IsCountKey){//当按键按下

while(PRESSED==IsCountKey){//当按键一直按下

DisplayNumByOrder(count);//显示原数值

}

}

}

}

//扫描键盘

void main(){

;

){

IsCount(count);

count++;

DisplayNumByOrder(count);

;

}

}

9.  在上题的基础上,用另外三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。

#include <reg51.h>

#define unit unsigned int

unit code NumTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数字的编码

到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。

sbit high;

sbit mid;

sbit low;

sbit Key1;//开始

sbit Key2;//暂停

sbit Key3;//清零

;//按下

的时候暂停

//监测

void delay_1ms(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

/**

在数码管上显示对应的值

**/

void display(unsignedchar Num)

{

P0=NumTable[Num];

delay_1ms);

P0;      //送完段选信号后,进行消影的处理

}

/**

位,并分解计数值

**/

void DisplayNumByOrder(unit Count){

low);

low);

low);

low);

low);

low);

low);

low);

}

//是否清零

void IsClear(unit * count){

if(PRESSED==Key3){       //当按键按下

delay_1ms);       //去抖动

if(PRESSED==Key3){   //当按键按下

;

}

}

}

//是否暂停

void IsSuspend(unit * count){

if(PRESSED==Key2){       //当按键按下

delay_1ms);       //去抖动

if(PRESSED==Key2){   //当按键按下

while(SUSPEND){

IsClear(count);          //监测是否需要清零

if(PRESSED==Key1)return;//跳出暂停

DisplayNumByOrder(*count);//显示原数值

}

}

}

}

//扫描键盘

void main(){

;

){

IsSuspend(&count);

IsClear(&count);

count++;

DisplayNumByOrder(count);

;

}

}

10.按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...

#include <reg51.h>

#include <stdio.h>

#define unit unsigned int

#define uchar unsigned char

unit code NumTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数字的编码

个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...

sbit high;

sbit mid;

sbit low;

sbit Key1;//开始

sbit Key2;//暂停

sbit Key3;//清零

;//按下

的时候暂停

//延时

void delay_1ms(unit x){

unit i=x;

unit j;

;--i){

;--j);

}

}

/**

在数码管上显示对应的值

**/

void display(unsignedchar Num)

{

P0=NumTable[Num];

delay_1ms);

P0;      //送完段选信号后,进行消影的处理

}

/**

位,并分解计数值

**/

void DisplayNumByOrder(unit Count){

low);

low);

low);

low);

low);

low);

low);

low);

}

//是否清零

void IsClear(unit * count){

if(PRESSED==Key3){       //当按键按下

delay_1ms);       //去抖动

if(PRESSED==Key3){   //当按键按下

;

}

}

}

//是否暂停

void IsSuspend(unit * count){

if(PRESSED==Key2){       //当按键按下

delay_1ms);       //去抖动

if(PRESSED==Key2){   //当按键按下

while(SUSPEND){

IsClear(count);          //监测是否需要清零

if(PRESSED==Key1)return;//跳出暂停

DisplayNumByOrder(*count);//显示原数值

}

}

}

}

uchar scanKey(){

uchar tmp, key;

P3 =0xf0;

tmp = P3;

tmp = tmp &0xf0;

if(tmp !=0xf0){//确定列

switch(tmp){

;break;

;break;

;break;

;break;

}

}

//确定行

P3 =0x0f;

tmp = P3;

tmp = tmp &0x0f;

if(tmp !=0x0f){

switch(tmp){

case0x0d:key = key;break;

+ key;break;

+ key;break;

}

}

return key;

}

//扫描键盘

void main(){

// int count=0;

){

unit key= scanKey();

DisplayNumByOrder(key*key);

}

}

实验1 单片机IO口应用及数码管显示的更多相关文章

  1. STM32系列单片机IO口模式设置

    STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和 ...

  2. 单片机IO口驱动能力

    以STM32的IO口为例,最大的输出电流和灌入电流在芯片手册上都有说明.单个IO口一般都是十几mA到几十mA,同时总的VDD电流也有限制,大概为150mA.所以单片机驱动外设时,如果不是信号型而是功率 ...

  3. 如何检测 51单片机IO口的下降沿

    下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿. 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有 ...

  4. 51单片机:IO口扩展芯片用法(74HC165,74HC595)

    IO口扩展芯片,主要是解决单片机IO口太少. 74HC165:数据从并转串 74HC595:数据从串转并 两种芯片,都是通过时序电路,加上移位功能,进行数据传输 74HC165:数据从并转串.以下实例 ...

  5. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...

  6. MOS管、PCB、H桥、步进电机驱动电路、51单片机的IO口驱动能力、灌电流、拉电流、上拉电阻的选择

    嵌入式开发PCB设计几点体会(转载):http://bbs.ednchina.com/BLOG_ARTICLE_3021801.HTMCollector-Emitter Saturation Volt ...

  7. 51单片机I/O引脚IO口工作原理

    51单片机I/O引脚IO口工作原理 一.51单片机管脚p0.p1.p2.p3口区别如下: 1.意思不同P0口作输出口用时,需加上拉电阻.P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外 ...

  8. AVR单片机8位数码管显示的程序实现

    AVR单片机8位数码管显示的程序实现 转载:http://www.sohu.com/a/117255149_119709   2016-10-26 16:30 我们接着来完成 数码管的显示实验.现在我 ...

  9. 单片机与控制实验(5)——重量测量并在LCD12864显示

    一.实验目的和要求 掌握点阵式液晶显示屏的原理和控制方法,掌握点阵字符的显示方法.掌握模拟/数字(A/D)转换方式,进一步掌握使用C51语言编写程序的方法,使用C51语言编写实现重量测量的功能. 二. ...

随机推荐

  1. jQuery动画函数回调

    $("#show").click(function () { //function 是显示完成之后的回调函数 $("p").show(2000,function ...

  2. 设计模式之生成者模式java源代码

    假设要组装一辆自行车,并且自行车就是车轮和车架组成. Builder对应于组装自行车所使用的车轮和车架 ConcreteBuiler对应于自行车的车轮和车架,同时可以返回一辆自行车. Product对 ...

  3. Vue组件中引入jQuery

    一.安装jQuery依赖 在使用jQuery之前,我们首先要通过以下命令来安装jQuery依赖: npm install jquery --save # 如果你更换了淘宝镜像,可以使用cnpm来安装, ...

  4. java基本知识归集

    类中可以有几种东西:属性,方法,构造器,初始化块 new创建对象时, 1.类属性和类初始化块分配空间. 2.执行默认初始化 如有父类,先为父类执行父类自己的1和2步骤,再执行上面的1和2. 一个类执行 ...

  5. GOIP connects with Elastix through “config by line”

    GOIP connects with Elastix through “config by line” By grace Liu on May 17, 2013 in Elastix, Gateway ...

  6. appium获取package和activity

    输入命令adb shell dumpsys window w |findstr \/ |findstr name=然后在手机端打开app,电脑上按enter就即可显示 以微信为例子 appPackag ...

  7. Python终端彩色字体的输出

    实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033 ...

  8. ubunut下安装ibus_pinyin中文输入法

    ubuntu安装中文输入法,,此处一ibus-pinyin为例为其安装中文输入法,,, 1. 设置(setting)---语言支持(language support)---汉语(chinese),,, ...

  9. java web 大总结

    C/s架构:        socket.serversocket.awt/swing做一个客户端软件        建好socket连接后,通过IO流交换数据.数据格式由各个开发者自己确定,B/C架 ...

  10. 解决css3不支持同时缩放和旋转的办法

    设置两个div,外层scale,内层rotate.