#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//共阳极七段显示码
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//共阴极七段显示码
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
//共阴极位选序列
unsigned char code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//共阳极位选序列
unsigned char code table[]={
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code table[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//软件复位
void soft_reset(void)
{
((void(code*)(void))0x0000)();
}
//200ms延时程序
void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
//一秒定时子程序
void timer0() interrupt 1
{
static unsigned char temp;
TH0=0x3c;
TL0=0xb0;
temp++;
if(temp==20)
{}
}
//4*4矩阵键盘扫描,第0位扫描第一行,第1位扫描第二行。。。第4位扫描第一列,第5位扫描第二列
unsigned char KeyScan(void)
{
uchar temp,i,temp1=0xfe;
static uchar key=0;
for(i=0;i<4;i++)
{
P2=temp1;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:key=4*i+0;break;
case 0xd0:key=4*i+1;break;
case 0xb0:key=4*i+2;break;
case 0x70:key=4*i+3;break;
}
}
}
temp1=(temp1<<1)|0x01;
}
return key;
}
或者使用下面未简化的程序
unsigned char KeyScan(void)
{
uchar temp;
static uchar key=0;
P2=0xfe;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&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;
}
}
}
P2=0xfd;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:key=4;break;
case 0xd0:key=5;break;
case 0xb0:key=6;break;
case 0x70:key=7;break;
}
}
}
P2=0xfb;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:key=8;break;
case 0xd0:key=9;break;
case 0xb0:key=10;break;
case 0x70:key=11;break;
}
}
}
P2=0xf7;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:key=12;break;
case 0xd0:key=13;break;
case 0xb0:key=15;break;
case 0x70:key=16;break;
}
}
}
return key;
}
51单片机外围器件使用的头文件代码(很详细)
需积分: 10 42 浏览量
2011-10-30
09:12:23
上传
评论
收藏 6KB RAR 举报
DreamMakers
- 粉丝: 702
- 资源: 81
最新资源
- 全卷积网络基于voc2012数据集简单pytorch实现
- pycharm的一些介绍-用于更好的学习python
- 基于C++的程序设计大赛天梯赛L2答案(天梯赛)
- 基于python实现的三次样条插值和均值插值法实现
- Python语言教程2-python批量图片大小处理-多文件夹
- Python语言教程1-python批量图片重命名,将后缀某几个不想要的字去除
- Space Combat Kit 太空战斗套件Unity游戏开发插件资源unitypackage C#
- Universal Device Preview 通用设备预览Unity游戏开发插件资源unitypackage
- Paladin Anim Set 圣骑士动画集Unity游戏动作动画插件资源unitypackage
- 计算机财务管理期末考报表部分题目及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈