标题:
单片机计数器 写一个循环程序,求思路
[打印本页]
作者:
20010410
时间:
2021-6-16 12:04
标题:
单片机计数器 写一个循环程序,求思路
计数器模拟。
要求: (1)计数器有3个控制按钮1号、2号、3号,1个计数按钮A。
(2)按完1号按钮,再按A钮,计数暑进入加计数状态,最大计到(5+组号) 2, 时间间隔为0.5s。
按完2号按钮后,再按A按钮,计数器进入减计数状态,从(5+组号) 2开始减计数,时间、间隔为0.5s.
按完3号按钮后,再按A按钮,计数器保持显示“Pp”字样。
另外 :要求按下任意一个按钮时,都会从头计数
问一下各位大神怎么写循环程序?
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
uchar segcode[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar bitcode[]={0x01,0x02};
uchar keycode1,keycode2;
unsigned char Num[2];
void delayms(uint m)
{
unsigned int n;
while(m--)
{
for(n=0;n<113;n++);
}
}
void numobuf(int i)
{
Num[1]=i/10;
Num[0]=i%10;
}
void display(void)
{
unsigned int i;
for(i=0;i<2;i++)
{
P2=bitcode[i];
P0=segcode[Num[i]];
delayms(1);
}
}
void display2(void)
{
unsigned int i;
for(i=0;i<2;i++)
{
P2=bitcode[i];
P0=0x73;
delayms(1);
}
}
uchar keyscan1(void)
{
keycode1=0;
if(P10==0)
{
delayms(10);
if(P10==0)
{
while(P10==0);
keycode1=1;
}
}
if(P11==0)
{
delayms(10);
if(P11==0)
{
while(P11==0);
keycode1=2;
}
}
if(P12==0)
{
delayms(10);
if(P12==0)
{
while(P12==0);
keycode1=3;
}
}
return keycode1;
}
uchar keyscan2(void)
{
keycode2=0;
if(P13==0)
{
delayms(10);
if(P13==0)
{
while(P13==0);
keycode2=1;
}
}
return keycode2;
}
main()
{
int a=0;
int i=0;
int j=0;
while(1)
{
P0=segcode[0];
keycode1=0;
keycode2=0;
a=keyscan1();
if(a==1)
{
while(keyscan2()==0);
for(i=0;i<36;i++)
{
for(j=0;j<25;j++)
{
numobuf(i);
display();
delayms(10);
}
}
}
if(a==2)
{
while(keyscan2()==0);
for(i=36;i>0;i--)
{
for(j=0;j<25;j++)
{
numobuf(i);
display();
delayms(10);
}
}
}
if(a==3)
{
while(keyscan2()==0);
while(1)
{
display2();
delayms(1);
}
}
}
}
复制代码
7072FAB6-A754-4038-A710-8ED1A3A946C2.jpeg
(1.16 MB, 下载次数: 51)
下载附件
2021-6-16 12:02 上传
作者:
xunzhaod
时间:
2021-6-17 16:05
给你一个思路,定义三个标志位,分别对应计数1,2,3.比如按下按键1,再按下按键a,flag1 =1;
在主循环判断
if(flag1==1)
{
数据清零;
开始计数
}
if(flag2==1)
{
数据清零;
开始计数
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1