单片机流水灯选择器程序
时间:2026-01-18
时间:2026-01-18
单片机流水灯选择器程序
#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuint
unsignedint
sbitbutton=P3^2;
ucharkey_l,key_h,key,i=0,flag=0;Unsigned
char
sum_du[9]={0x06,0x5b,0xcf,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示控制
unsigned
char
lamp1[10]={0xa6,0x59,0xd9,0x26,0x99,0x88,0xa7,0x7f,0x97,0xa7};
unsigned
char
lamp2[10]={0x77,0x88,0x39,0xd6,0x66,0x97,0x7d,0x07,0x06,0x39};
unsigned
char
lamp3[10]={0x3b,0x7b,0x54,0xcf,0x66,0x9d,0x73,0x7c,0x83,0x96};
//------------------延迟1ms----------------//voiddelay(uintz){
uintx,y;for(x=z;x>0;x--)for(y=123;y>0;y--);}
//--按下按键1时对数码管及LED的显示控制--//
voidplay1(){while(1)
unsigned
char
lamp4[10]={0x99,0x66,0x93,0xe3,0xec,0xfb,0x7d,0x07,0x7f,0x67};
unsigned
char
lamp5[10]={0xe5,0x46,0xbb,0xde,0x66,0x99,0x7d,0xf5,0x9b,0x75};//闪烁方式控制
unsigned
char
lamp6[10]={0x9b,0x5b,0x66,0x6d,0x7d,0x7b,0x67,0x39,0x5e,0x71};
unsigned
char
lamp7[10]={0xb6,0x71,0xcf,0x6d,0x7d,0xdb,0x98,0x7c,0x39,0x5e};
unsigned
char
lamp8[10]={0xac,0x5b,0xd6,0x7d,0xb7,0x7f,0xe7,0x67,0x39,0x71};
unsigned
char
lamp9[10]={0x6b,0x6b,0x96,0x79,0xba,0x7f,0xa7,0xc5,0x39,0xc9};
{
P0=sum_du[0];
//数码管显示1
for(i=0;i<10;i++){
P2=lamp1[i];
//P2口读取数据
delay(800);
//
灯显示0.8s
}
}
}
//--按下按键2时对数码管及LED的显示控制--//voidplay2()
{
while(1){
P0=sum_du[1];
//--按下按键3时对数码管及LED的显示控制--//
voidplay3(){
while(1){
P0=sum_du[2];for(i=0;i<10;i++)
{
P2=lamp3[i];delay(800);}
}}
//--按下按键4时对数码管及LED的显示控制--//
voidplay4(){
while(1){
P0=sum_du[3];for(i=0;i<10;i++)
{
}
}}
}}
}
for(i=0;i<10;i++){
P2=lamp2[i];delay(800);}
P2=lamp4[i];delay(800);}
//--按下按键5时对数码管及LED的显示控制--//
voidplay5(){
while(1){
P0=sum_du[4];for(i=0;i<10;i++){
P2=lamp5[i];delay(800);}
//--按下按键6时对数码管及LED的显示控制--//
voidplay6(){
while(1){
P0=sum_du[5];for(i=0;i<10;i++){
P2=lamp6[i];delay(800);}}}
//--按下按键7时对数码管及LED的显示控制--//
voidplay7(){
while(1){
P0=sum_du[6];for(i=0;i<10;i++){
P2=lamp7[i];delay(800);}{
P0=sum_du[8];for(i=0;i<10;i++){
P2=lamp9[i];
//-------------主函数-------------voidmain()
P2=0x00;while(1)
{}}}
}
//--按下按键8时对数码管及LED的显示控制--//
voidplay8(){while(1)
{
P0=sum_du[7];for(i=0;i<10;i++){
P2=lamp8[i];delay(800);}}
//按下按键9时对数码管及LED的显示控制//
voidplay9(){
while(1)
delay(800);}}
P0=0x3f;
{
P1=0xf0;//给P1口高四位赋
值1,低四位赋值0
key_l=P1;
//按键读取
//行值高四位赋值0
key_h=key_h&0x0f;
key_l=key_l&0xf0;
if(key_l!=0xf0)//有按键按下时{
delay(20);if(key_l!=0xf0)
{
key_l=P1&0xf0;
再次读取按键值
key_l=key_l|0x0f;
//读取列值
P1=key_l;
给P1口低四位赋值1
key_h=P1;
//读取行值
case0xeb:play7();break;case0xdb:play8();break;case0xbb:play9();break;
}
}
}
////
}
switch(key)
{
//消抖
//得出按键值
}
//列值低四位赋值0
key_l=key_l&0xf0;
key=key_h+key_l;
//指定按键处理事件
case0xee:play1();break;case0xde:play2();break;case0xbe:play3();break;case0xed:play4();break;case0xdd:play5();break;case0xbd:play6();break;
…… 此处隐藏:658字,全部文档内容请下载后查看。喜欢就下载吧 ……下一篇:资料员考试试题及答案