按键控制彩灯

更新时间:2023-11-10 20:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

/*试题3.21按键控制彩灯软件开发

在下列开发板硬件基础上,编写完整程序实现如下模拟彩灯,

开发板从左至右4个按键分别是S1~S4,从上至下8个灯为L1~L4, 按下S1键,8个LED小灯以1HZ频率闪烁,按下S2灯奇偶交替点亮, 间隔0.3秒,按下S3键,L1~L4与L5~L6灯交替点亮,间隔0.2s, 按下S4键熄灭所有灯。 */

#include

#define uchar unsigned char #define uint unsigned int

void scan_KeyBord(); //声明键盘扫描程序

void main() {

TMOD=0x01; //设置T0定时,工作方式1 while(1) {

scan_KeyBord(); } }

void delay0_1s()//0.1s延时程序 { uchar t; for(t=0;t<2;t++) { TH0=0X3c; TL0=0xb0; TR0=1; while(!TF0) ; TF0=0; } }

void delay_t(uint t)//延时0.1*t秒 {

uint i;

for(i=0;i

void delay(uchar t) {

uchar i; while(t--)

{ for(i=0;i<125;++i) ; //延时约1ms } }

//8个LED小灯以1HZ频率闪烁 void op1() { uchar i; for(i=0;i<3;i++) { P1=0x00;

delay_t(5); //0.5s P1=0xff; delay_t(5);

} }

//按下S2灯奇偶交替点亮,间隔0.3秒 void op2() { uchar i; for(i=0;i<3;i++) {

P1=0xaa; delay_t(3); P1=0x55; delay_t(3); } }

//L1~L4与L5~L6灯交替点亮,间隔0.2s void op3() { uchar i; for(i=0;i<3;i++) { P1=0x0f; delay_t(2);

P1=0xf0; delay_t(2); } }

//熄灭所有灯 void op4() {

P1=0xff; }

//键盘扫描程序

void scan_KeyBord() {

uchar temp; P3=0xff; temp=~P3;

temp=temp&0x0f; if(temp!=0)

delay(10);//延时去抖动 else return; //无键按下

temp=~P3;

temp=temp&0x0f;

switch(temp) {

case 0x01: op1();break; case 0x02: op2();break; case 0x04: op3();break; case 0x08: op4();break; default:; } }

本文来源:https://www.bwwdw.com/article/am0v.html

Top