C语言查询按键控制8个流水灯
注意发光二极管的方向以及接的电阻的大小。
/****************************************************************************&
&函数功能:用AT89C51实现左右开花和左移右移的流水灯,以及一个数码管显示 &
&端口说明:P0口控制数码管显示,P1口控制八个发光二极管,P3.0和P3.1控制两个按键(3.1没用到)&
*****************************************************************************/#include"AT89X51.h" //头文件包含声明,以下程序中的端口P0、P1、P3_0和P3_1等的说明都包含在该文件中unsigned char denmabiao[]={0xe7,0xdb,0xbd,0x7e}; //左右开花流水灯码表/*******延时函数******/
void delay(void)
{unsigned int i,j;for(i=0;i<50;i++) //双重循环实现延时,循环时间的长短可以通过修改50或2000的值来改变for(j=0;j<2000;j++);
}/*******开花流水灯*******/
void kaihua(void)
{ unsigned char i; //定义循环变量for(i=0;i<4;i++) //循环语句,通过查表实现开花流水灯{P1=denmabiao[i]; //将相应的表值送到P1口delay(); //延时}
}/*注意*——左移和右移并不是绝对的,硬件中灯的摆放不同,移的方向也会不同***/
/******右移流水灯******/
void right(void)
{unsigned char data i; //定义循环变量unsigned char a;a=0x7f; //右边第一个灯亮 01111111for(i=0;i<8;i++) //从右边起,第二个到第八个灯亮{ P1=a;delay(); //适当延时?a=(a>>1)+0x80; //向右移一位再与0x80位于,以保证每次只有一个灯被点亮 00111111+10000000=10111111}
}/****左移流水灯****/
void left(void)
{unsigned char data i; //变量定义unsigned char a;a=0xfe; //左边第一个灯亮for(i=0;i<8;i++) //从左边起,第二个到第八个灯亮{P1=a;delay(); //适当延时,以避免乱码a=(a<<1)|0x01; //向左移一位再与0x01位于,以保证每次只有一个灯被点亮}
}/******主函数*****/
void main(void)
{char x=0;while(1) //无限循环,以保证只要一上电,系统一直运行0.1.2{ if(P3_0==0){ x=x+1;while(!P3_0);if(x==3)x=0;}if(x==0)kaihua();else if(x==1)left();elseright();}
}
使用的工具:keil c 、proteus
本文发布于:2024-02-04 22:37:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170717967660331.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |