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

#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中

我知道还是你吧,上次给你写过的程序,有点缺陷。给你留过言,可能没有看到吧。就在这给你重写一次吧。
#include <reg52.h>
#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);
}
//闪烁程序结束
}
}来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

请教一下怎么在计数器里加多一个按键控制灯闪烁和灯灭的C语言程序...
⑤上面第④的原因,无非就是因为 按键死等 造成的,你应该想办法解决,避开按键死等(采用状态记录,通过识别按键 从 按下 到 不按,就能知道是 松手了)⑥显示函数也是毛病多多,我不知道你的硬件有没有帮到你,不过,你的软件却是,没有消影。⑦另外建议你,学会定时器,摒弃 Delay( ) 函数。...

plc中怎么实现:用一个开关控制灯泡,按一下灯亮,再按一下灯灭?
你如果是用三菱的PLC,可以使用ALTP这个功能指令.是交替输出的意思!

plC编程 按钮按一下,灯亮并保持,按钮按第二下,延时3秒后灯灭。循环往 ...
这个过程循环进行,每按一次按钮,就触发一个新的计数和灯泡状态的改变。另一种方案是利用按钮控制一个寄存器自加。每次按钮按下,寄存器加1。然后,将寄存器的值除以3,取余数来决定灯泡的亮灭状态:余数为1,一个灯亮;余数为2,两个灯亮;余数为0,三个灯亮。但要确保只有在寄存器数值大于0时,...

plc怎么实现一个按钮控制两个或三个灯?
要实现PLC中按钮控制灯光的逻辑,首先,可以使用一个整数寄存器作为计数器。将初始值设为0,每当按钮被按下,计数器加1。当计数器等于1时,灯光亮起;等于2时,通过SM0.5输出1秒周期的闪烁;若等于3,灯光关闭。再次按下按钮,计数器重置为1,重复此循环。另一种方法是使用一个更复杂的逻辑。通过按...

一个按纽控制一盏灯,按一下灯亮,再按一下灯灭…,请用三凌的plc编程,谢 ...
0 LD I0.0 EU CTD C0, 2 LD Q0.0 ED R C0, 1 LD M0.0 S Q0.0, 1 LD C0 R Q0.0, 1 I0.0为按钮,Q0.0为灯,C0为计数器,M0.0为中间继电器,SM0.0为常闭使能端!我是按西门子的编的,你改下常闭使能端就好了!

plc控制一个灯每秒闪三次是怎么回事?
M8013是一秒周期特殊内部继电器 如LD M8013 OUT Y0 就是Y0一秒钟输出一次 控制一个灯闪三次, 可以用计时器+计数器控制 或者用 用M8013+计数器 下图所示M0是启动开关, Y0是灯,按一次启动开关, 灯闪烁三次后停止(每1秒闪烁一次)再次按下启动,重复这个动作 三菱PLC控制指示灯每秒闪烁三次的电路图...

三菱PLC中控制一灯闪三次怎么做
在三菱PLC中,实现一盏灯闪三次的操作并不复杂,主要借助M8013特殊内部继电器和计数器。首先,利用M8013的1秒周期特性,当启动开关(M0)被按下时,灯(Y0)开始闪烁。通过计数器来控制闪烁次数,每闪烁一次后,计数器加1,直到计数器达到3,灯的闪烁就会停止。再次按下启动开关,此过程会重复进行。当...

三菱PLC中控制一灯闪三次怎么做
M8013是一秒周期特殊内部继电器,如LD、M8013、OUT、Y0就是Y0一秒钟输出一次,控制一个灯闪三次,可以用计时器+计数器控制,用M8013+计数器,M0是启动开关,Y0是灯,按一次启动开关,灯闪烁三次后停止(每1秒闪烁一次),再次按下启动,重复这个动作。当用户将用户程序调试完成后,通过编程器将其程序...

PLC编程:一个按钮一个指示灯,按一下灯亮,按两下灯闪,按三下灯灭
VW100 LDW= VW100, 1 = Q0.0 LDW= VW100, 2 A SM0.5 = Q0.0 初始给一个整数地址送入0,每按一次按钮整数加1,所以整数等于1就输出灯亮,等于2就串一个SM0.5(1s周期脉冲)输出闪烁,等于3就没有输出,再按等于4时候又把1送入整数灯亮,循环这样 ...

三菱plc中,怎么用跳转指令实现一个按钮控制一个灯,帮忙编个程序。
我这个程序从第6步以下不用,就是一个最简单的一个开关控制输出的打开与关闭,一般常用于马达的启停,灯的打开与关闭。我在这里想要感谢一下那位不知道是什么货的东西帮我找出这个程序的错误,现实当中就需要这样的淫才。程序当中跳转条件木有达成时,跳转区的程序也会执行,这个大家以后要主要。现在我...

相似回答