数字显示键盘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深圳大学实验报告课程名称:嵌入式系统与软件

实验项目名称:简易数字显示键盘

学院:电子科学与技术

专业:微电子科学与工程

指导教师:黎冰

报告人:

学号:

班级:微电子一/二班

实验报告提交时间:2015/12/31

一.实验目的:

了解掌握arm7 lpc2000系列芯片,学会在keil上编译hex文件并在proteus上仿真。

二.项目要求:

1. 选题具备一定的实用价值,产业应用前景及可实现性;

2. 使用Proteus和Keil进行设计和系统仺真;

3. 基于LPC2000系列ARM7芯片进行设计;

三.实验内容:

所用器件:

电阻若干,lpc2138芯片一个,数字键盘一个,数码管一个,开关,电容,等。所实现的功能:

当按下键盘时数码管会显示对应数字并且对应led会亮起,附带流水灯,跑马灯,闪烁灯。

实验程序:

#include

#define uchar unsigned char

#define BEEPCON (1<<12) //0x00001000 //定义P0.12脚控制B1,低电平蜂鸣

int k=0; //定时器中断计数器

uchar a=0; //LED闪烁函数标志

void delay(int x) //普通延时函数

{

int i;

for(;x>0;x--)

for(i=10000;i>0;i--);

}

/**************************** 定时器中断延时函数*******************/ void ms(unsigned int x) //定时器中断延时函数

{

T0TCR = 0X01; //启动定时器

while(k!=x); //当k不等于x时

T0TCR = 0X00; //关闭定时器

T0TC = 0; //设定定时器初值为0

T0PC = 0; //清除定时器中断计数器

k=0;

}

void time0()__irq //定时器服务函数,对应k++

{

k++;

T0IR = 1;

VICVectAddr = 0;

}

/********************LED动作函数*************************/ void LED_1() //流水灯函数

{

unsigned char i;

for(i=0;i<10;i++)

{

IO1SET = 1<<(i+16);

delay(20);

IO1CLR = 1<<(i+16);

}

}

void LED_2() //跑马灯函数

{

unsigned char i;

for(i=0;i<15;i++)

{

if(i<10)

{

IO1SET = 1<<(i+16);

delay(20);

IO1CLR = 1<<(i+16);

}

else

{

IO1SET = 1<<(29-i);

delay(20);

IO1CLR = 1<<(29-i);

}

}

}

void LED_3() //LED闪烁函数

{

unsigned char i;

for(i=0;i<10;i++)

{

IO1SET = 0x1FF<<16;

delay(20);

IO1CLR = 0X1FF<<16;

delay(20);

}

}

/****************************数码管与键盘扫描函数************************/

void display(uchar x) /*数码管显示函数x为显示的数字*/

{

unsigned char table[10]={0x00,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,

0x07,0x7f,0x6f};

unsigned char table2[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x100}; IO0SET = (table[x]<<25);

IO1SET = (table2[x]<<16);

delay(20);

IO0CLR = (table[x]<<25);

IO1CLR = (table2[x]<<16);

}

void key_w() //键盘按行低电平扫描函数

{

IO0SET = 0X7<<20;

IO0CLR = 1<<20;

delay(2);

IO0SET = 1<<20;

IO0CLR =1<<21;

delay(2);

IO0SET =1<<21;

IO0CLR =1<<22;

delay(2);

IO0SET =1<<22;

}

unsigned char key_r() /*键盘按列读取扫描数值返回值为键盘对应数字*/ {

int a=0,b; //a为行,b为列

switch(IO0PIN&(7<<16)) //通过IP0PIN寄存器获取P0.16,0.17,0.18当前电平状态

{

case 0x00060000:b=1;break;

case 0x00050000:b=2;break;

case 0x00030000:b=3;break;

default:break;

相关文档
最新文档