
单片机,C语言 函数调用的问题
#include<cnm.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={0x28,0...
#include<cnm.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};
sbit key1=P3^2;
sbit key2=P3^3;
sbit a=P1^7;
sbit b=P1^6;
sbit c=P1^5;
sbit d=P1^4;
uint num,num1;
void delay(){
uint z;
z=5000;
while (z--);
}
uint key_scan(key)
{
if(key==0){
delay();
if (key==0){
num++;
while(1) {
if(key==1){
delay();
if (key==1)break;
} //松开key 继续
}
}
if (num==10)
num=0;
}
return num;
}
void main()
{
while(1)
{
num=key_scan(key1); //这里不懂!!!
a=0 ;
P2=table[num];
num=key_scan(key2); //这里不懂!!!
b=0;
P2=table[num];
}
}
这是51单片机的C程序
大概功能: 数码管的两位 分别对应key 和key1两个按钮。按一下,对应位数加一。
请教下怎么调用key-scan 函数。像上面的调用不对。
请大神帮忙哈谢谢了 展开
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};
sbit key1=P3^2;
sbit key2=P3^3;
sbit a=P1^7;
sbit b=P1^6;
sbit c=P1^5;
sbit d=P1^4;
uint num,num1;
void delay(){
uint z;
z=5000;
while (z--);
}
uint key_scan(key)
{
if(key==0){
delay();
if (key==0){
num++;
while(1) {
if(key==1){
delay();
if (key==1)break;
} //松开key 继续
}
}
if (num==10)
num=0;
}
return num;
}
void main()
{
while(1)
{
num=key_scan(key1); //这里不懂!!!
a=0 ;
P2=table[num];
num=key_scan(key2); //这里不懂!!!
b=0;
P2=table[num];
}
}
这是51单片机的C程序
大概功能: 数码管的两位 分别对应key 和key1两个按钮。按一下,对应位数加一。
请教下怎么调用key-scan 函数。像上面的调用不对。
请大神帮忙哈谢谢了 展开
3个回答
展开全部
这程序是不对的,num这个参数会出现问题,不可能兼顾两个数码管的数据。
#include<cnm.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};
sbit key1=P3^2;
sbit key2=P3^3;
sbit a=P1^7;
sbit b=P1^6;
sbit c=P1^5;
sbit d=P1^4;
uint num1,num2;
void delay(){
uint z;
z=5000;
while (z--);
}
uint key_scan(key)
{
uint num;
num=0;
if(key==0){
delay();
if (key==0){
num=1;
}
}
return(num);
}
void main()
{
num1=0;
num2=0;
while(1)
{
while(key_scan(key1)) //这里不懂!!!
{a=0 ;
num1++;
num1%=10;
P2=table[num1];
delay();
}
while(key_scan(key2)) //这里不懂!!!
{ b=0;
num2++;
num2%=10;
P2=table[num];
delay();
}
}
#include<cnm.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};
sbit key1=P3^2;
sbit key2=P3^3;
sbit a=P1^7;
sbit b=P1^6;
sbit c=P1^5;
sbit d=P1^4;
uint num1,num2;
void delay(){
uint z;
z=5000;
while (z--);
}
uint key_scan(key)
{
uint num;
num=0;
if(key==0){
delay();
if (key==0){
num=1;
}
}
return(num);
}
void main()
{
num1=0;
num2=0;
while(1)
{
while(key_scan(key1)) //这里不懂!!!
{a=0 ;
num1++;
num1%=10;
P2=table[num1];
delay();
}
while(key_scan(key2)) //这里不懂!!!
{ b=0;
num2++;
num2%=10;
P2=table[num];
delay();
}
}
展开全部
这样调用没问题,num=key_scan(key1); 这里是将P3.2口的状态传递给key_scan( )函数 ,低电平按下,则NUM加1,下面将NUM送给P2口段选。 两个函数都是一个样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.首先,假设你的端口输入输出都已经正确;2.把num=key_scan(key2); //这里不懂!!!改成num1=key_scan(key2); //这里不懂!!!;3.用printf()语句调试,看看程序的值在哪不对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询