蓝色的天空ZQC 蓝色的天空ZQC
关注数: 44 粉丝数: 44 发帖数: 979 关注贴吧数: 54
刚学单片机,帮忙看下为什么程序初始状态(没有按按键),灯全亮 #include <reg51.h> //此文件中定义了51的一些特殊功能寄存器 #include <intrins.h> //--定义要使用的IO口--// #define GPIO_KEY P1 //独立键盘用P1口 #define GPIO_LED P0 //led使用P0口 //--定义全局函数--// void Delay10ms(unsigned int c); //延时10ms unsigned char Key_Scan(); void LED1(); void LED2(); void LED3(); void LED4(); void LED5(); void LED6(); void LED7(); void LED8(); void main(void) { unsigned char keyNum; while (1) { keyNum = Key_Scan(); //扫描键盘 switch (keyNum) { case(0xFE) : //返回按键K1的数据 LED1(); break; case(0xFD) : //返回按键K2的数据 LED2(); break; case(0xFB) : //返回按键K3的数据 LED3(); break; case(0xF7) : //返回按键K4的数据 LED4(); break; case(0xEF) : //返回按键K5的数据 LED5(); break; case(0xDF) : //返回按键K6的数据 LED6(); break; case(0xBF) : //返回按键K7的数据 LED7(); break; case(0x7F) : //返回按键K8的数据 LED8(); break; default: break; } } } /******************************************************************************* * 函 数 名 : Key_Scan() * 函数功能 : 扫描键盘 * 输 入 : 无 * 输 出 : 读取到的键值 *******************************************************************************/ unsigned char Key_Scan() { unsigned char keyValue=0 , i; //保存键值 //--检测按键1--// if (GPIO_KEY != 0xFF)//检测按键K1是否按下 { Delay10ms(1);//消除抖动 if (GPIO_KEY != 0xFF)//再次检测按键是否按下 { keyValue = GPIO_KEY; i = 0; while ((i<50) && (GPIO_KEY != 0xFF)) //检测按键是否松开 { Delay10ms(1); i++; } } } return keyValue; //将读取到键值的值返回 } /******************************************************************************* * 函 数 名 : Delay10ms * 函数功能 : 延时函数,延时10ms * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Delay10ms(unsigned int c) //误差 0us { unsigned char a, b; //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LED1 * 函数功能 : LED左移闪烁两次 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED1() { unsigned char i; GPIO_LED = 0x01; for (i=0; i<16; i++) { GPIO_LED = _crol_(GPIO_LED, 1); Delay10ms(5); } } /******************************************************************************* * 函 数 名 : LED2 * 函数功能 : LED右移闪烁两次 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED2() { unsigned char i; GPIO_LED = 0x80; for (i=0; i<16; i++) { GPIO_LED = _cror_(GPIO_LED, 1); Delay10ms(5); } } /******************************************************************************* * 函 数 名 : LED3 * 函数功能 : LED交替闪烁 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED3() { GPIO_LED = 0xaa; Delay10ms(5); GPIO_LED = 0x55; Delay10ms(5); GPIO_LED = 0xaa; Delay10ms(5); GPIO_LED = 0x55; Delay10ms(5); } /******************************************************************************* * 函 数 名 : LED4 * 函数功能 : LED交替闪烁 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED4() { GPIO_LED = 0x55; Delay10ms(5); GPIO_LED = 0xaa; Delay10ms(5); GPIO_LED = 0x55; Delay10ms(5); GPIO_LED = 0xaa; Delay10ms(5); } /******************************************************************************* * 函 数 名 : LED5 * 函数功能 : LED交替闪烁 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED5() { GPIO_LED = 0xCC; Delay10ms(5); GPIO_LED = 0x33; Delay10ms(5); GPIO_LED = 0xCC; Delay10ms(5); GPIO_LED = 0x33; Delay10ms(5); } /******************************************************************************* * 函 数 名 : LED6 * 函数功能 : LED交替闪烁 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED6() { GPIO_LED = 0x33; Delay10ms(5); GPIO_LED = 0xCC; Delay10ms(5); GPIO_LED = 0x33; Delay10ms(5); GPIO_LED = 0xCC; Delay10ms(5); } /******************************************************************************* * 函 数 名 : LED7 * 函数功能 : LED1到LED6来一遍 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED7() { LED1(); LED2(); LED3(); LED4(); LED5(); LED6(); } /******************************************************************************* * 函 数 名 : LED8 * 函数功能 : 全灭 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LED8() { GPIO_LED = 0x00; }
1 下一页