- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章任务三
第五章任务三:采用两个外中断的LED彩灯控制
P0端口作为输出口,外接8只LED,P3.2外接按键K1,P3.3外接按键K2。编写程序,没有按下任何按键时,LED隔灯闪烁,当按键K1为奇数次时,LED进行左移流水-右移流水显示。当按下按键K1为偶数次时,LED进行拉幕式显示;当按下按键K2时,LED暂停显示,蜂鸣器发出“叮咚”的开门声音,然后LED继续花样显示(K2按键优先)。
#includereg52.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
sbit key2=P3^3;
sbit beep=P1^0;
uchar code tab[]={
0xff,0xe7,0xc3,0x81,
0x00,0x81,0xc3,0xe7};//开幕式编码
uchar temp=0x01,key_count,flag,right,beep_FG;
void delay(uint ms)
{
uint i,j;
for(i=ms;i0;i--)
for(j=110;j0;j--);
}
void init()
{
EA=1;//打开总中断
EX0=1;//打开外部中断INT0
EX1=1;//打开外部中断INT1
IT0=1;//下降沿触发方式
IT1=1;//下降沿触发方式
PX0=0;//设置INT0为???中断优先级
PX1=1;//设置INT1为高中断优先级
}
void interval_LED()
{
P0=0xff;
delay(500);
P0=0xaa;
delay(500);
}
void left_right_move()
{
if(!right)
temp=_crol_(temp,1);
else
temp=_cror_(temp,1);
if(temp==0x01)
{
right=0;
}
if(temp==0x80)
right=1;
}
void open_LED()
{
uchar count;
temp=tab[count++];
if(count==8)
count=0;
}
void Beep()
{
uchar i,j,k;
for(i=100;i;i--)
for(j=20;j;j--)
{
for(k=1000;k;k--)
beep=~beep;
}
/*for(i=100;i;i--)
for(j=200;j;j--)
{
for(k=1000;k;k--)
beep=~beep;
}*/
beep_FG=0;
}
void main()
{
init();
beep=0;
while(1)
{
if(!flag)
interval_LED();
else
{
if(beep_FG)
{
Beep();
}
else
{
switch(key_count%2)
{
case 1:
left_right_move();
break;//奇数次按键左移右移显示
case 0:
open_LED();
break;//偶数次按键拉幕式显示
default:break;
}
P0=~temp;
delay(400);
}
}
}
}
void key1_interrupt() interrupt 0
{
flag=1;
key_count++;
}
void key2_interrupt() interrupt 2
{
flag=1;
beep_FG=1;
}
文档评论(0)