51单片机入门(LED篇)

📅 发布时间:2026/7/6 12:50:10 👁️ 浏览次数:
51单片机入门(LED篇)
LED闪烁当我们需要LED不断闪烁且有一个闪烁间隔时间时可在STC.ISP上设置,如图软件延时计算器但对于图中的_nop_加上一个头文件:#includeINTRINS.H并且要调用生成代码的主函数即Delay500ms独立按键介绍原有结构按下时:中间的弹片被压扁三个接触点就会被连接四个引脚也全部被连接松手时:中间的弹片不会被压扁原理图第一个按键用P3_1表示;第二个按键用P3_0表示;第三个按键用P3_2表示;第四个按键用p3_3表示当P3_1用0表示时说明按键按下用1表示时说明松开例:if(P3_10) { Delay(20); while(P3_10); Delay(20); }其中Delay是一个自己编写的延时函数用来确定独立按键的状态(按下或松开)这么做的理由:独立按键中间有个弹片按下时弹片会在按下和松开两种状态下来回切换20mm后弹片会趋于稳定。数码管显示静态从单片机的左向右LED灯的序列依次减小876----)用代码使其亮灭的原理:先选中LED灯的序号,再控制abcdefg区域的亮灭选中序号:当选中LED6时如图所示对应Y5选中LED4时对应Y3再用二进制表示5即101。用P2_2,P2_3,P2_4来对应三位数规则高位对高位P2_41; P2_30; P2_21;当选中LED4时此时P2_40;P2_31;P2_21;选中区域:用P0来表示选中LED当该区域亮时用1来表示不亮时用0来表示上图是LED灯表示为6时的示意图分析从下往上依次排开0111 1101转化为16进制7 DP00x7D;此时LED表示为6下图为0-9的断码动态unsigned char NixieTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} int Nixie(unsigned char Location,Number) { switch(Location) { case 1:P2_41;P2_31;P2_21;break; case 2:P2_41;P2_31;P2_20;break; case 3:P2_41;P2_30;P2_21;break; case 4:P2_41;P2_30;P2_20;break; case 5:P2_40;P2_31;P2_21;break; case 6:P2_40;P2_31;P2_20;break; case 7:P2_40;P2_30;P2_21;break; case 8:P2_40;P2_30;P2_20;break; } P0NixieTable[Number]; return 0; } int main() { while(1) { Nixie(1,1); Nixie(2,2); Nixie(3,3); } }上图是实现LED灯显示数字的代码,但是上图代码并不正确若用上图代码会使LED灯发生错乱,所以应进行消影或者使用延时函数(Delay)使其呈动态消影先关闭前一位显示、再更新下一位数据int Nixie(unsigned char Location,Number) { switch(Location) { case 1:P2_41;P2_31;P2_21;break; case 2:P2_41;P2_31;P2_20;break; case 3:P2_41;P2_30;P2_21;break; case 4:P2_41;P2_30;P2_20;break; case 5:P2_40;P2_31;P2_21;break; case 6:P2_40;P2_31;P2_20;break; case 7:P2_40;P2_30;P2_21;break; case 8:P2_40;P2_30;P2_20;break; } P0NixieTable[Number]; 在此处加上Delay(1);(这是为了让其稳定的显示,否则显示后立即熄灭,在人眼中会感觉到暗 P00x00; return 0; }