该程序是一个基于51单片机的数码管显示和按键扫描的程序。程序中定义了宏uchar和uint分别表示无符号字符和无符号整数。接下来定义了按键的引脚K1、K2、K3和FMQ,并定义了一个标志位flag_KEY和一个计时器ScanTime。然后定义了数码管的段码表SEG_Tab,用于显示数字。接下来是数码管显示的函数display(),通过P2和P1的赋值来驱动数码管显示不同的数字。然后是按键扫描的函数keyscan(),通过检测K1、K2、K3是否为低电平来判断按键是否按下,并通过flag_KEY来保证按键只响应一次。最后是主函数,通过不断调用display()和keyscan()函数来实现数码管显示和按键功能,并根据按键状态设置FMQ引脚的电平。\n\n#include &lt;reg51.h&gt;\n\n#define uchar unsigned char\n#define uint unsigned int\n\n//按键\nsbit K1=P3^0;\nsbit K2=P3^1;\nsbit K3=P3^2;\nsbit FMQ=P3^3;\nbit flag_KEY=0; //按键松开标志位 \nunsigned char ScanTime=1; //数码管4个位\nunsigned int Num=50;\n//数码管段码表\nunsigned char code SEG_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};\n/-------------------------------------\n\t\t\t数码管显示\n---------------------------------------/\t\nvoid display()\n{\n\tP2=0x00;\n\tP1=0xFF;\n switch(ScanTime)\n\t{\n\t\t//-----------数码管第1位-------------\t\t\n\t\tcase 1: \n\t\t\tP2=SEG_Tab[Num/10];\t\t\n\t\t\n\t\t P1=0xFE;\n\t\tbreak;\n\t\t//-----------数码管第2位-------------\t\t\n\t\tcase 2: \n\t\t\tP2=SEG_Tab[Num%10];\t\t\n\t\t\n\t\t\tP1=0xFD;\n\t\tbreak;\n\t //------------------default---------------\t\n\t\tdefault: break;\t\n\t}\n\t\n\t//-----数码管循环------\t\n\tScanTime++;\n\tif(ScanTime>2)\n\t{\n\t\tScanTime=1;//循环扫描\t\n\t}\n}\n\n/-------------------------------------\n\t\t\t按键扫描\n---------------------------------------/\t\nvoid keyscan()\n{\n\tif(K1==0) \n\t{\n\t\tif(flag_KEY==1)//按键只响应1次\n\t\t{\n\t\t\tflag_KEY=0;\n\t\t\n\t\t\tif(Num<99)\n\t\t\t{\n\t\t\t\tNum++;\n\t\t\t}\n\t\t}\n\t}\n\telse if(K2==0)\n\t{\n\t\tif(flag_KEY==1)//按键只响应1次\n\t\t{\n\t\t\tflag_KEY=0;\n\t\t\n\t\t\tif(Num>0)\n\t\t\t{\n\t\t\t\tNum--;\n\t\t\t}\n\t\t}\n\t} \n\telse if(K3==0)\n\t{\n\t\tif(flag_KEY==1)//按键只响应1次\n\t\t{\n\t\t\tflag_KEY=0;\n\t\t\n\t\t\tNum=50;\n\t\t}\n\t}\n else//按键松开\n {\t\n flag_KEY=1;\n }\n}\n\n\n/-------------------------------------\n\t\t\t主函数\n---------------------------------------/\t\nvoid main()\n{\n\twhile(1)\n\t{\n\t\tdisplay();\n\t\tkeyscan();\n\t\t\n\t\tif(K1==0||K2==0||K3==0)\n\t\t{\n\t\t\tFMQ=0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tFMQ=1;\n\t\t}\n\t}\n


原文地址: https://www.cveoy.top/t/topic/pHz3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录