标题:
单片机键盘与按键中断仿真实验
[打印本页]
作者:
张露婕
时间:
2018-10-18 19:06
标题:
单片机键盘与按键中断仿真实验
4X4键盘(中断方式),当K1键按下后,首先使蜂鸣器响一声,然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(12.06 KB, 下载次数: 76)
下载附件
2018-10-19 01:49 上传
单片机源程序如下:
#include <reg51.h>
sbit P3_7=P3^7;
sbit P3_3=P3^3;
char key=0;
char sign=0;
void delay(long time)
{
char i=0;
while(time--)
for(i=0;i<125;i++);
}
void delay1(long time)
{
char i=0;
while(time--)
for(i=0;i<125;i++);
}
void onbuz()
{
P3_7=1;
delay(100);
P3_7=0;
}
void kind1()
{
char i=0;
char data1[2]={0x0f,0xf0};
for(i=0;i<2;i++)
{
P0=data1[i];
delay(200);
}
P0=0xff;
}
void kind2()
{
char i=0;
char data2[4]={0x03,0x0c,0x30,0xc0};
for(i=0;i<4;i++)
{
P0=data2[i];
delay(200);
}
P0=0xff;
}
void kind3()
{
char i=0;
char data3[4]={0x81,0x42,0x24,0x18};
for(i=0;i<2;i++)
{
P0=data3[i];
delay(200);
}
P0=0xff;
}
void run()
{
char i;
while(sign==0)
{
onbuz();
for(i=0;i<3;i++)
{
kind1();
}
for(i=0;i<3;i++)
{
kind2();
}
for(i=0;i<3;i++)
{
kind3();
}
}
}
void run1()
{
char i;
while(sign==0)
{
onbuz();
for(i=0;i<3;i++)
{
kind1();
}
}
}
void keyon() interrupt 0
{
char num_l,num_h,num;
if(P1!=0xf0)
{
delay1(100);
if(P1!=0xf0)
{
P1=0xf0;
num_h=P1^0xf0;
P1=0x0f;
num_l=P1^0x0f;
num=num_h+num_l;
}
}
P1=0xf0;
switch(num)
{
case 0x11:break;
case 0x12:break;
case 0x14:break;
case 0x18:break;
case 0x21:
key=num;
break;
case 0x22:
key=num;
break;
case 0x24:break;
case 0x28:break;
case 0x41:break;
case 0x42:break;
case 0x44:break;
case 0x48:break;
case 0x81:break;
case 0x82:break;
case 0x84:break;
case 0x88:break;
}
sign=0;
}
void keyoff() interrupt 2
{
P0=0xff;
P1=0xf0;
sign=1;
}
void main()
{
P3_7=0;
P1=0xf0;
EA=1;
EX0=1;
EX1=1;
TCON=0x05;
while(1)
{
P1=0xf0;
if(key==0x21)
{
run();
}
if(key==0x22)
{
run1();
}
}
}
复制代码
0.png
(52.94 KB, 下载次数: 59)
下载附件
2018-10-19 01:50 上传
所有资料51hei提供下载:
实 验 三.rar
(61.47 KB, 下载次数: 22)
2018-10-18 19:06 上传
点击文件名下载附件
内含电路图和代码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1