课程设计,键盘扫描显示程序(c51)

发布者:平静心境最新更新时间:2016-09-13 来源: eefocus关键字:课程设计  键盘扫描  显示程序  c51 手机看文章 扫描二维码
随时随地手机看文章
//课程设计,键盘扫描显示程序

//由于开发板中使用了锁存器,在proteus中仿真的话,加上锁存器的话,会出现乱码,并且//不成功,所以,就不贴图了,不过以下代码,在事物板上测试成功

 

//实验代码为实现按键扫描,并显示在数码管上

//实验班上共有4个按键,分别接在p3.4,p3,5,p3.6.p3.7上,因此并没有用到矩阵键盘扫描,//控制起来比较简单,6数码管观通过锁存器接在P0口上。

        #include

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6;      //数码管段选控制位

sbit wela=P2^7;      //数码管位选控制位

uchar key=8;

 

//共阴数码管段码(不叫特殊的编码)

uchar code table[]=

{

       0xed,      0x48,      0xf4,       0xb5,      0x99,

       0x3d,      0x7d,      0x85,      0xfd,       0xbd,

       0xdd,      0x79,      0x6c,      0xf1,       0x7c,     

       0x5c,      0x10,   0x00,  

};

//位选编码

uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

 

//函数声明

void display(uchar Duan_value,uchar Wei_value);  //数码管扫描函数

void delay(uchar t);  //延时函数

void key_scan(); //按键扫描函数

 

void delay(uchar t)

{

 uchar x,y;

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

      for(y=111;y>0;y--);

}

 

//显示对应位选的数码管按键值

void display(uchar Duan_value,uchar Wei_value)

{

             dula=1;

              P0=table[Duan_value];

              dula=0;

              wela=1;

              P0=table1[Wei_value];

              wela=0;

              delay(3);

}

 

void key_scan()

{

       uchar temp;   

       P3=0xff;     //P3口写1,用于读取数据

       temp=P3&0xf0;     //只取高四位

       if(temp!=0xf0)

       {             

              delay(10);       //延时,去除抖动

              temp=P3&0xf0;

              if(temp!=0xf0)

              {    

                  switch(temp)

                     {

                         case 0xe0:key=0;break;

                            case 0xd0:key=1;break;

                            case 0xb0:key=2;break;

                            case 0x70:key=3;break;

                            default:

                            key=8;break;

                     }

                  do{         //消除按起抖动                                                              

                            temp=P3;

                           temp&=0Xf0;

                     }while(temp!=0xf0);

              }

       }

}

 

void main()

{

       while(1)

       {

              display(key,5);       //用开发板上最后一位显示按键值

              key_scan();   

       }

}

关键字:课程设计  键盘扫描  显示程序  c51 引用地址:课程设计,键盘扫描显示程序(c51)

上一篇:课程设计:矩阵键盘扫描显示(c51反转法)
下一篇:keil 中文乱码的一种解决办法

推荐阅读最新更新时间:2024-03-16 15:09

C51中断函数格式
C51 Keil 编译器中断函数语法定义: void 函数名() interrupt n using m C51编译器允许0~31个中断,C51控制器所提供的中断及中断地址如下: 中断号 中断源 中断地址 0 EXTERNAL 0 0003H 1 TIMER/COUNTER 0 000BH 2 EXTERNAL 1 0013H 3 TIMER/COUNTER 1 001BH 4 SERIAL PORT 0023H 中断函数编写规则: 不能进行参数传递 无返回值 在任何情况,不能直接调用中断函数 可以在中断函数定义中用using指定当前使用的寄存器组 void 函数名 () i
[单片机]
M16单片机l红外线解码程序+led数码管显示
我自己用icc+M16写的一个led显示+红外线解码程序 一个特别功能 也是他们常用的功能 按键处理程序 按一下只变一个数  按住1s左右(自己设置)快速变化  进一步的功能正开发中  下一步 就是3771+39610 步进电机驱动程序 希望大家多多支持哦! 哦对了 里面的图片是用flash8做的 原理图是用protues6.9 画的 仿真上有点问题 实际电路中 是正常的 单片机源码: /* 01-05 22:30 2007-1-6 23:04 infrared //ICC-AVR application builder : 2006-12-16 0:17:05 2006-12-1
[单片机]
M16单片机l红外线解码<font color='red'>程序</font>+led数码管<font color='red'>显示</font>
如何用C51实现单片机和PLC之间通讯的实例
1、 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。 它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机 作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2、Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Mo
[单片机]
如何用<font color='red'>C51</font>实现单片机和PLC之间通讯的实例
HT1621显示屏驱动芯片单片机源程序
HT1621是128 点内存映象和多功能的LCD 驱动器 , HT1621 的软件配置特性使它适用于多种 LCD 应用场合,包括 LCD 模块和显示子系统。用于连接主控制器和HT1621 的管脚只有 4 或 5 条, HT1621 还有一个节电命令用于降低系统功耗。在虎风所做的这个系统中 ht1621 用于驱动一个静态的 LCD 液晶显示器。液晶显示的方式分为静态显示和动态显示 。 静态与动态的区别在于静态显示是持续供电的 , 而动态显示是利用人的视觉停留效果 , 快速扫描数码管各个段 , 让人在视觉上感觉到数码管是同时显示的。 各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶 程序调了几天都没进展,
[单片机]
HT1621<font color='red'>显示</font>屏驱动芯片单片机源<font color='red'>程序</font>
PWM的C51程序
#include intrins.h #include stdio.h #include math.h #include UPSD3200.H #include upsd_pwm.h #define uint unsigned int #define uchar unsigned char PSD_REGS PSD8xx_reg _at_ csiop; #define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07 sbit CP=P4^7; sbit U_D=P1^1; void init_system(); // 系统初始化 uchar keyboard(); void uPSD_PWM4
[单片机]
Keil C51中变量的使用方法
8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机的 存储 结构的特殊性,Keil C51中变量的使用与标准C有所不同。正确地使用变量,有利于获得高效的目标代码。下面详细介绍Keil C51中变量的使用方法。   1 CPU 存储 结构与变量的关系   变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。   标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以
[单片机]
Keil <font color='red'>C51</font>中变量的使用方法
不带字库的128*64液晶汉字显示程序
下面是线路连接图,我自己已经搞了整整一个测试成功了绝对可用 由于篇幅有限完整的c51代码下载 : http://www.51hei.com/f/12864wu.rar 源代码: #include reg52.h #define LCD P0 unsigned char i,j,k; sbit EN=P2^0; sbit RW=P2^1; sbit RS=P2^2; sbit CS1=P2^3; sbit CS2=P2^4; sbit BUSY=P0^0; void delay(unsigned char a); unsigned char code ban ={ {0x00,0x00,0x00,0xf0,0x90,0x90
[单片机]
不带字库的128*64液晶汉字<font color='red'>显示</font><font color='red'>程序</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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