按键控制彩灯的仿真电路图:
单片机源程序:
- /**********************刘金森 1440302103 电子信息工程*********************/
- #include<reg51.h> //51单片机头文件
- #include<intrins.h> //包含crol(循环左移)函数所在的头文件
- #define uint unsigned int
- void delay(int z); //声明子函数
- unsigned char temp; //定义一个变量,用来给P1口赋值
- int i,j;
- sbit Key0=P0^0;
- sbit Key1=P0^1;
- sbit Key2=P0^2; //定义三个按键
- /**************按键控制函数************/
- uint key()
- {
- uint temp;
- Key0=0;
- Key1=0;
- Key2=0;
- if(Key0==1)
- {
- delay(500); //延时500毫秒,去按键时的抖动
- if(Key0==1)
- {
- temp=0xfc; //1111 1100B 只有两盏灯亮
- P1=temp;
- while(Key0)
- {
- delay(500);
- temp=_crol_(temp,1); //将temp循环左移一位后再赋给temp
- P1=temp; //将移位后的值赋给P1口,从低位到高位逐个点亮发光二极管
- }
- }
-
- }
- else if(Key1==1)
- {
- delay(500); //延时500毫秒,去按键时的抖动
- if(Key1==1)
- {
- temp=0x10; //0001 0000B 只有一盏灯不亮
- P1=temp;
- while(Key1)
- {
- delay(500);
- temp=_cror_(temp,1); //将temp循环左移一位后再赋给temp
- P1=temp; //将移位后的值赋给P1口,从低位到高位逐个点亮发光二极管
- }
- }
-
- }
- else if(Key2==1)
- {
- delay(500); //延时500毫秒,去按键时的抖动
- if(Key2==1)
- {
- temp=0xfd; //1111 1101B 只有一盏灯亮
- P1=temp;
- while(Key2)
- {
- delay(500);
- temp=_cror_(temp,1); //将temp循环左移一位后再赋给temp
- P1=temp; //将移位后的值赋给P1口,从低位到高位逐个点亮发光二极管
- }
- }
-
- }
-
-
- return temp;
- }
- void delay(int z) //延时z毫秒
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*****************主函数*************/
- void main()
- {
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
test1.zip
(73.8 KB, 下载次数: 63)
|