想在计数器里加一个按键控制一个灯闪烁和熄灭

#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit k6 = P1^6; //按键k6连接到了单片机的P1.6引脚sbit k7 = P1^7; //按键k7连接到了单片机的P1.7引脚uchar Table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码。uchar qianwanwei,baiwanwei,shiwanwei,wanwei,qianwei,baiwei,shiwei,gewei;//定义8个变量用于存放计数值count的各个位uint count=0;//初始计数值uint i=0;//定义一个全局变量i,当想把count分成千万,百万,十万,万,千、百、十、个位是用来临时存储count数据用//********一下声明三个函数***************/ void display(void); //显示函数void process(uint i); //数据处理函数,负责做除法运算,将计数器里的数分成千万,百万,十万,万,千,百,十,个void key(void); // 按键函数,用于检测是否有按键按下,如果有就相应的加或减计数器里的数/*****************************延时子程序********************************/ void delayms(uchar ms) { uchar i; while(ms--) { for(i = 0; i < 120; i++); } } /*****************************显示函数**********************************/ void display(void) //动态显示函数,参数P为待显示的数组名{ P2=0x7f; //打开P2.7位控制的数码管?P0=Table[qianwanwei]; //取千万位在Table数组中所对应的显示段码送P0口delayms(1);P2=0xbf; //打开P2.6位控制的数码管P0=Table[baiwanwei]; //取百万位在Table数组中所对应的显示段码送P0口delayms(1);P2=0xdf; //打开P2.5位控制的数码管P0=Table[shiwanwei]; //取十万位在Table数组中所对应的显示段码送P0口delayms(1);P2=0xef; //打开P2.4位控制的数码管P0=Table[wanwei]; //取万位在Table数组中所对应的显示段码送P0口delayms(1);P2=0xf7; //打开P2.3位控制的数码管。P0=Table[qianwei]; //取千位在Table数组中所对应的显示段码送P0口delayms(1); //延时函数,动态显示,延时过长会出现一个一个点亮的效果。P2=0xfb; //打开P2.2位控制的数码管。P0=Table[baiwei]; //取百位在Table数组中所对应的显示段码送P0口delayms(1); //延时函数,动态显示,延时过长会出现一个一个点亮的效果。P2=0xfd; //打开P2.1位控制的数码管。P0=Table[shiwei]; //取十位在Table数组中所对应的显示段码送P0口delayms(1); ⼀⼀延时函数,动态显示,延时过长会出现一个一个点亮的效果。P2=0xfd; ⼀⼀打开P2.1位控制的数码管。P0=Table[shiwei]; ⼀⼀取十位在Table数组中所对应的显示段码送P0口delayms(1); ⼀⼀延时函数,动态显示,延时过长会出现一个一个点亮的效果。P2=0xfe; ⼀⼀打开P2.0位控制的数码管。P0=Table[gewei]; ⼀⼀取个位在Table数组中所对应的显示段码送P0口delayms(1); ⼀⼀延时函数,动态显示,延时过长会出现一个一个点亮的效果。P2=0xff; ⼀⼀P2口输出全"1",所有三极管都截止,数码管全熄灭} ⼀*****************************数据处理**********************************⼀ void process(void) { qianwanwei=i⼀10000000; ⼀⼀取i的千万位,保存到数组qianwanwei中baiwanwei=i⼀1000000; ⼀⼀取i的百万位。保存到数组baiwanwei中
2026年09月23日 18:50
有1个网友回答
网友(1):

我知道还是你吧,上次给你写过的程序,有点缺陷。给你留过言,可能没有看到吧。就在这给你重写一次吧。
#include
#define uchar unsigned char
#define uint unsigned int
sbit k0 = P3^7; //另加一个按键在P3.7引脚,根据你学习板再改吧
sbit light=P3^2; //另加一个LED灯在P3.2引脚,根据你学习板再改吧
bit blink; //闪烁标志位,=1时LED灯闪烁,=0时LED灯灭
//****延时子程序****//这是原来的延时子程序没有变
void delayms(uchar ms)
{ uchar i;
while(ms--)
{
for(i = 0; i < 120; i++);//如果闪烁的快慢不合适,可修改这个120的值
}
}
//以上这些你还熟悉吧,是你原来的程序部分
//主程序改了一部分,这次肯定符合你的要求了。
main()
{
uchar k;
light=1; //开机先灭LED灯,输出0时亮,接法见仿真图
while(1)
{
//在这里写你原来的那些程序,原来的显示子程序照常写

if(blink)
{
k++;

if(k==40)//根据闪烁速度修改k==40的值
{
light=!light;
k=0;
}
}
if(k0==0)
{
blink=!blink;
if(!blink)light=1;//LED灯灭
else k=0;
while(k0==0);
}
//闪烁程序结束
}
}