PIC单片机开发板独立键盘扫描+蜂鸣器响+数码管 C程序代码

发布者:梦想学院最新更新时间:2019-11-18 来源: 51hei关键字:PIC单片机  独立键盘  蜂鸣器  数码管 手机看文章 扫描二维码
随时随地手机看文章

/*

为自已写的独立键盘扫描+蜂鸣器响+数码管

犯的错:unsigned密写成了unsigner一直提示找不到a,b

  PORTD0=1;不行,要写成PORTD=0x01;才可以,经实验证得没有PORTD0没这个东西,应为RD0=1; 

  PORTD=0x03;不是第三个灯亮,而是0000 0011是两个灯亮

  PORTD=0x8则是0000 1000是第4个灯亮。。。。。出错因原进制转化,刚开始写程序进制转化混掉了。

*/

#include

#define uchar unsigned char

#define uint unsigned int

__CONFIG(0x3B31);

const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //数码管数组

uchar key_num;

void delay(uint x)  //延时函数

{

uint a,b;

for(a=x;a>0;a--)

  for(b=110;b>0;b--);

}

void scan();   //扫描键盘函数  声明

void didi(uchar num); //蜂鸣器响 函数 声明

void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7); //数码管显示 声明

//-----------------------------------------------------------------------------------

void init()        //初始化函数

{

TRISA=0x00; 


TRISB=0xff;  


TRISC=0X00;


TRISD=0x00; 


TRISE=0x00;  


PORTC=0Xff;  


PORTD=0x00; 


}

//-------------------主函数-----------------------------------------------------------

void main()

{

init ();

while(1)

{

scan();   //扫描键盘

disp(key_num,2,3,4,5,6,7,8); //后面的直接传给数码管而第一个是几,我们要用键盘来检测,则第一个变量由key_num

}

}

//-------------------------------------------------------------------------------------


void didi(uchar num) //蜂鸣器函数,num响几声

{

uchar di_num; //di_num响几声

for(di_num=num;di_num>0;di_num--)

  {

  RE0=1;

  delay(100);

  RE0=0;

  delay(50);

  }

}

void scan()  

if(RB0==0)

  {

  delay(10); 


  if(RB0==0)

   {

   didi(1);

   while(!RB0); 


//   PORTD=0x01;  //若写成RD0=1;也可,不过呢,会出现灯亮了之后不会灭掉,还得加清零(灭灯)

   key_num=1;

   }

  }

if(RB1==0)

  {

  delay(10); 


  if(RB1==0)

   {

   didi(2);

   while(!RB1);


//   PORTD=0x02;

   key_num=2;

   }

  }

if(RB2==0)

  {

  delay(10); 


  if(RB2==0)

   {

   didi(3);

   while(!RB2);


//   PORTD=0x04;

   key_num=3;

   }

  }

if(RB3==0)

  {

  delay(10); 


  if(RB3==0)

   {

   didi(4);

   while(!RB3); 


//   PORTD=0x08;

   key_num=4;

   }

  }

}


//---------------------------数码管显示函数,数组------------------------------------------------

void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7)

{

PORTD=table[num0];

PORTA=0x00;  //第一个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num1];

PORTA=0x02;  //第二个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num2];

PORTA=0x04;  //第三个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num3];

PORTA=0x06;  //第四个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num4];

PORTA=0x08;  //第五个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num5];

PORTA=0x0A;  //第六个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num6];

PORTA=0x0c;  //第七个数码管选通

delay(2);  //延时,显示2ms


PORTD=table[num7];

PORTA=0x0e;  //第八个数码管选通

delay(2);  //延时,显示2ms

}


关键字:PIC单片机  独立键盘  蜂鸣器  数码管 引用地址:PIC单片机开发板独立键盘扫描+蜂鸣器响+数码管 C程序代码

上一篇:PIC单片机温感器DS18B20 C语言程序代码
下一篇:PIC单片机开发板:数码管动态扫描程序,显示静态效果

推荐阅读最新更新时间:2024-11-13 14:10

LCD+PIC单片机12864串行显示程序
程序代码: #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(HS&WDTDIS); #include Drive_Serial.h uchar line1_data = { 顶顶电子欢迎您! }; uchar line2_data = { www*ddmcu*com }; uchar line3_data = { DD-900实验开发板 }; uchar line4_data = { TEL: 15853209853 }; /********端口设置函数********/ void port_init(
[单片机]
基于51单片机开发板的应用(数码管
在对LED灯的应用有了一定的了解之后,我开始学习了一些关于数码管的应用。 在我的开发板上,有独立共阳管和八位共阴管 。数码管从高位到低位的段码依次是h(dp),g,f,e,d,c,b,a共八位。共阴管是“1”表示亮,“0”表示灭,而共阳管则是相反的。顺便提一句,若是要检测数码管是否完好,可以用数码管“8”来检测。 若是要在数码管上显示0~F,则可以用一套固定的十六进制数表示,可以放在数组中,为{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。这一个数组是用来表示共阴管的亮的,而若是共阳管的时候,需要在前面加
[单片机]
蜂鸣器式通导率与线圈检查器电路图
蜂鸣器式通导率与线圈检查器电路图
[模拟电子]
<font color='red'>蜂鸣器</font>式通导率与线圈检查器电路图
嵌入式学习笔记4——51单片机之蜂鸣器和继电器
1. 51单片机I/O口的驱动能力有限,一般只有10mA以内,不足以直接驱动蜂鸣器和继电器,故需一个放大设备,如ULN2003。 2. 继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,他实际上是用较小的电流去控制较大电流的一种 自动开关 。 (电磁继电器:小电流部分通电产生磁力,便使大电流部分的开关合上。)
[单片机]
嵌入式学习笔记4——51单片机之<font color='red'>蜂鸣器</font>和继电器
AVR,C51和PIC单片机比较
八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。 1. 51系列   应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。   51系列优点之一是它从内部
[单片机]
用51单片机做一个电子钟
学了一个多月51了,终于整了个电子钟出来,个人感觉还是比较有趣的。 需要注意的是我用的是普中的板子,板子类型不同,io口的功能可能会有所差异。然后我这个k1开关和k2开关是接反了的,原本k1应该是接P3^0,k2接P3^1的,结果我一测试才知道k1接到了P3^1,k2接到P3^0了,不过这不要紧,用sbit定义位变量时注意换一下就可以了。然后大概讲讲功能,用8个数码管显示目前时间和闹铃时间,然后用4个独立按键对目前时间和闹铃时间进行调整(k2是加,k3是减 ,k4是用来停止闹铃的),第一次按k1是对目前时间秒数调整,第2次按k1是对目前时间分钟数调整,第三次按k1是对目前时间小时数调整,第4次按k1是对闹铃秒数调整,第5次按k
[单片机]
51单片机-矩阵键盘模块-长短按键&数码管显示-编程模板
1.视频 bilibili视频地址: https://www.bilibili.com/video/av90715834 51单片机-矩阵键盘模块-长短按键&数码管显示-模块化编程模版 2.文件 代码文件下载地址: https://download.csdn.net/download/weixin_43130546/12180191 3.说明 此段代码体现了模块化编程思想,具有很好的可移植性。 用到的知识点包括:矩阵键盘扫描,长短按键,按键动作识别;数码管动态扫描,数码管高位不显示;LED;BUZZER;片内片外RAM。 89C52: 有 8K FLASH(存程序.hex文件的地方 ); 有512BRA
[单片机]
PIC单片机的各种中断有没有优先级之分?
PIC单片机的各种中断有没有优先级之分? 中档PIC单片机的中断入口只有一个,硬件不分优先级,但可用软件查询的方式决定其优先级高低:先查先做,优先级为高。高档的17和18系列,包括即将推出的16位dsPIC,中断有硬件优先级。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved