stc15矩阵扫描写法

#include

#define uint unsigned int//宏命令 定义

#define uchar unsigned char

sfr AUXR = 0x8E;

sfr P4 = 0xC0; //P4

sbit a=P2^5;

sbit b=P2^6;

sbit c=P2^7;

//4行

sbit r1=P3^0;

sbit r2=P3^1;

sbit r3=P3^2;

sbit r4=P3^3;

//4列

sbit c1=P4^4;

sbit c2=P4^2;

sbit c3=P3^5;

sbit c4=P3^4;

void delay(uint z)

{

uint x,y;

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

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

}

void led()//led灯(通过译码器)

{

a=0;

b=0;

c=1;

}

void feng()//蜂鸣器(-)

{

a=1;

b=0;

c=1;

}

void wei()//数码管位选(-)

{

a=0;

b=1;

c=1;

}

void duan()//数码管段选(-)

{

a=1;

b=1;

c=1;

}

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

unsigned int temp,num;

uint home,mo,num,key;

unsigned char key_scan()

{

unsigned char key_value;

delay(1);

r1=0;

r2=r3=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=0;delay(5);}

else if(!c2){key_value=1;delay(5);}

else if(!c3){key_value=2;delay(5);}

else if(!c4){key_value=3;delay(5);}

delay(1);

r2=0;

r1=r3=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=4;delay(5);}

else if(!c2){key_value=5;delay(5);}

else if(!c3){key_value=6;delay(5);}

else if(!c4){key_value=7;delay(5);}

delay(1);

r3=0;

r2=r1=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=8;delay(5);}

else if(!c2){key_value=9;delay(5);}

else if(!c3){key_value=10;delay(5);}

else if(!c4){key_value=11;delay(5);}

delay(1);

r4=0;

r2=r3=r1=1;

c1=c2=c3=c4=1;

if(!c1){key_value=12;delay(5);}

else if(!c2){key_value=13;delay(5);}

else if(!c3){key_value=14;delay(5);}

else if(!c4){key_value=15;delay(5);}

key=key_value;

return key_value;

}

void main()

{

feng();

P0=0x20;

led();

P0=0xff;

wei();

P0=0xff;

duan();

P0=0xbf;

while(1)

{

key_scan();

duan();

P0=tab[key];

}

}

#include

#define uint unsigned int//宏命令 定义

#define uchar unsigned char

sfr AUXR = 0x8E;

sfr P4 = 0xC0; //P4

sbit a=P2^5;

sbit b=P2^6;

sbit c=P2^7;

//4行

sbit r1=P3^0;

sbit r2=P3^1;

sbit r3=P3^2;

sbit r4=P3^3;

//4列

sbit c1=P4^4;

sbit c2=P4^2;

sbit c3=P3^5;

sbit c4=P3^4;

void delay(uint z)

{

uint x,y;

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

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

}

void led()//led灯(通过译码器)

{

a=0;

b=0;

c=1;

}

void feng()//蜂鸣器(-)

{

a=1;

b=0;

c=1;

}

void wei()//数码管位选(-)

{

a=0;

b=1;

c=1;

}

void duan()//数码管段选(-)

{

a=1;

b=1;

c=1;

}

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

unsigned int temp,num;

uint home,mo,num,key;

unsigned char key_scan()

{

unsigned char key_value;

delay(1);

r1=0;

r2=r3=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=0;delay(5);}

else if(!c2){key_value=1;delay(5);}

else if(!c3){key_value=2;delay(5);}

else if(!c4){key_value=3;delay(5);}

delay(1);

r2=0;

r1=r3=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=4;delay(5);}

else if(!c2){key_value=5;delay(5);}

else if(!c3){key_value=6;delay(5);}

else if(!c4){key_value=7;delay(5);}

delay(1);

r3=0;

r2=r1=r4=1;

c1=c2=c3=c4=1;

if(!c1){key_value=8;delay(5);}

else if(!c2){key_value=9;delay(5);}

else if(!c3){key_value=10;delay(5);}

else if(!c4){key_value=11;delay(5);}

delay(1);

r4=0;

r2=r3=r1=1;

c1=c2=c3=c4=1;

if(!c1){key_value=12;delay(5);}

else if(!c2){key_value=13;delay(5);}

else if(!c3){key_value=14;delay(5);}

else if(!c4){key_value=15;delay(5);}

key=key_value;

return key_value;

}

void main()

{

feng();

P0=0x20;

led();

P0=0xff;

wei();

P0=0xff;

duan();

P0=0xbf;

while(1)

{

key_scan();

duan();

P0=tab[key];

}

}


相关内容

  • 电子密码锁课程设计
  • 摘要: 为了提高个人资料.部门文件档案的保密性和安全性,采用高速.低功耗且具备ISP.IAP.内部E^2PROM功能的STC89C52单片机,设计了保密性更高的电子密码锁,并详细介绍STC89C52单片机内部E.PROM有关的特殊功能寄存器.读写子程序.该电子密码锁的上锁.开锁.修改密码都在片内进行 ...

  • 单片机系统设计报告(参考模板)11
  • 重庆科技学院 学生实习(实训)总结报告 院(系):__ ______ 专业班级:_____ _____ 学生姓名:_________________ 学 号:___ _______ 实习(实训) 地点:______ __ ____________ 报告题目:__ 单片机系统综合训练--基于单片机的简 ...

  • 机器人关节的设计与实现
  • 设计题目:机器人关节的设计与实现 学生姓名: ******* 所在院系: 信息工程学院 所学专业: 计算机科学与技术 导师姓名: ******** 完成时间: ********** 摘 要 机器人关节是机器人的基础部件,其性能的好坏直接影响机器人的性能.随着数字伺服技术等电子技术的发展,机器人关节也 ...

  • 简易电子秤电路设计
  • 摘要 随着计量技术和电子技术的发展,传统纯机械结构的杆秤.台秤.磅秤等装置逐步被淘汰.而电子秤是将传感器技术.信息处理.电子技术等技术综合一体的现代新型称重仪器.电子秤计量准确.快速方便,并且能实现自动称重和数字显示. 本作品主要以STC89C52单片机为控制核心,针对电子秤的自动称重.单价设置.金 ...

  • 单片机课程设计-简易计算器
  • 物理与电气工程学院课程设计报告 设计名称:简易计算器 院 部:物理与电气工程学院 专业班级:12级电信三班 学生姓名:孔维铮 080212092 指导老师:王陈宁 完成时间:2014年6月8日 摘 要 单片机课程设计是单片机原理课程的实践性环节.是在我们学习了<单片机原理>等课程的基础上 ...

  • 电子称毕业设计
  • 目 录 前 言 ........................................... 1 1 整体设计方案 ................................... 2 1.1 称重技术和衡器的发展 .............................. 2 1 ...

  • 单片机打铃系统设计
  • 毕业综合训练 (毕业论文/设计形式用) 课题名称 单片机打铃系统设计 学 院 信息工程学院 专 业 电子信息工程设计 班 级 13专电子1班 姓 名 李跃 学号 2013242638 指导老师 何健 江西科技学院 毕业综合训练任务书 学院 信息工程学院 专业 电子信息工程技术 年级 13 班级 电子 ...

  • 基于单片机的语音报价电子称的设计
  • 西北民族大学 2011级毕业设计(论文) 基于单片机的语音报价电子称的设计 年 级: 2011级 学 号: 姓 名: 专 业: 电气工程及其自动化 指导老师: 二零一五年六月 摘 要 本文设计的内容是一款基于单片机的语音报价电子秤,语音报价是本设计的一个特色,语音报价能够实现播报总价和总量的功能,本 ...

  • 单片机课程设计超声波测距离
  • 湖南工程学院 课 程 设 计 任 务 书 课程名称单片机原理与应用 课 题 超声波测距系统设计 专业班级 自动化0901班 学生姓名 段志勤 学 号 [1**********]0 指导老师 李晓秀 审 批 任务书下达日期 2012 年 5 月 30 任务完成日期 2012 年 6 月 13 日日 目 ...