51单片机,keil 软件 C语言问题(我错在哪了)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机,keil 软件 C语言问题(我错在哪了)相关的知识,希望对你有一定的参考价值。

//主机C语言程序
#include <reg51.h>//头文件,单片机硬件的底层驱动程序
#define uchar unsigned char//定义无符号的字符
#define uint unsigned int//定义无符号的整型
sbit SW=P1^0;
sbit LED=P1^1;
sbit SPK=P1^2;
uchar c=0x00;
uint n=0;
uint num[3];
//数码管段选码
uchar code dule_CODE[]=0x3F,//0
0x06,//1
0x5B,//2
0x4F,//3
0x66,//4
0x6d,//5
0x7c,//6
0x07,//7
0x7F,//8
0x67//9
;
//数码管位选码
uchar code wele_CODE[]=0x01,//1
0x02,//2
0x04,//3
;
//延时
void Delay(uint x)

uchar i;
while(x--)for(i=0;i<120;i++);

//向串口发送识别码
void putc_to_serialport(uchar c)

SBUF=c;
while(TI==0);
TI=0;

//主程序
void main()

LED=0;//关闭LED
SPK=0;//关闭蜂鸣器
p0=0x00;//关闭数码管
P2=0x00;
SCON=0x50;//串口工作方式1,允许接收
TMOD=0x20;//T1工作在模式2,8位自动装载
PCON=0x00;//波特率不倍增
TH1=0xFD;//波特率 9600
TL1=0xFD;
TI=RI=0;
TR1=1;//启动定时器T1
IE=0x90;//允许串口中断
while(1)

Delay(100);
if(SW==0)

while(SW==0);
c=SBUF;
putc_to_serialport(c);
LED=0;
SPK=0;
P0=0x00;
P2=0x00;
continue;



//主机串口接收中断函数
void serial_INT()interrupt 4

if(RI)//接收到一字节

RI=0;//清除串行接收中断标志
while(SW)

SPK=~SPK;
LED=~LED;
uint j;
for(j=0;j++;j<3)

n=SBUF-'0';
num[2]=n/100;//取百位
num[1]=n/10%10;//取十位
num[0]=n%10;//取个位
uint k;
for(k=0;k++;k<3)

P2=wele_CODE[k];
P0=dule_CODE[num[k]];
Delay(1);





编译 test.c ...
TEST.C(46): 错误 C202: 'p0': undefined identifier
TEST.C(82): 错误 C141: syntax error near 'unsigned'
TEST.C(82): 错误 C202: 'j': undefined identifier
TEST.C(83): 错误 C202: 'j': undefined identifier
TEST.C(89): 错误 C141: syntax error near 'unsigned'
TEST.C(89): 错误 C202: 'k': undefined identifier
TEST.C(90): 错误 C202: 'k': undefined identifier
TEST.C(92): 错误 C202: 'k': undefined identifier
TEST.C(93): 错误 C202: 'k': undefined identifier
test.c - 9 个错误, 0 个警告。

……
p0=0x00;//关闭数码管----P0,应该大写
……
//主机串口接收中断函数
void serial_INT()interrupt 4

uint k;----在这里定义
uint j;----在这里定义
if(RI)//接收到一字节

RI=0;//清除串行接收中断标志
while(SW)

SPK=~SPK;
LED=~LED;
// uint j;--不要在这里定义
for(j=0;j++;j<3)

n=SBUF-'0';
num[2]=n/100;//取百位
num[1]=n/10%10;//取十位
num[0]=n%10;//取个位
// uint k;---- !!!
for(k=0;k++;k<3)

P2=wele_CODE[k];
P0=dule_CODE[num[k]];
Delay(1);

……
改好即可。追问

再问下,
sbit SW=P1^0=0;
sbit LED=P1^1=0;
sbit SPK=P1^2=0;
为什么不可以,怎样才能取初值为0?
回答完这个立即采纳,拜托了!

追答

分开写即可。
……
sbit SW=P1^0;
sbit LED=P1^1;
sbit SPK=P1^2;
……
SW = 0;
LED = 0;
SPK = 0;
……

参考技术A 你的P0 J K未定义,追问

再问下,
sbit SW=P1^0=0;
sbit LED=P1^1=0;
sbit SPK=P1^2=0;
为什么不可以,怎样才能取初值为0?
回答完这个立即采纳,拜托了!

参考技术B TEST.C(46): 错误 C202: 'p0': undefined identifier P0应该大写
TEST.C(82): 错误 C141: syntax error near 'unsigned' uint j 应该在函数的开头
TEST.C(82): 错误 C202: 'j': undefined identifier j 未定义
TEST.C(83): 错误 C202: 'j': undefined identifier
TEST.C(89): 错误 C141: syntax error near 'unsigned' 应该在函数的开头
TEST.C(89): 错误 C202: 'k': undefined identifier
TEST.C(90): 错误 C202: 'k': undefined identifier
TEST.C(92): 错误 C202: 'k': undefined identifier
TEST.C(93): 错误 C202: 'k': undefined identifier 同理追问

再问下,
sbit SW=P1^0=0;
sbit LED=P1^1=0;
sbit SPK=P1^2=0;
为什么不可以,怎样才能取初值为0?
回答完这个立即采纳,拜托了!

参考技术C if(SW==0)

    while(SW==0);
    c=SBUF;
    putc_to_serialport(c);
    LED=0;
    SPK=0;
    P0=0x00;
    P2=0x00;
    continue;

我错哪了

请大神指点迷津。。。

#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n,i,count=0,k,l;
char a[502];
char b[502];
scanf ("%d",&n);
gets(a);
gets(b);
l=strlen (a);
for (i=0;i<l;i++)
{
if (a[i]==b[i])
{
count++;
}
}
k=count/l;
if (k<n)
{
printf("yes");
}
else printf("no");
return 0;
}

为什么只能读入一行?

以上是关于51单片机,keil 软件 C语言问题(我错在哪了)的主要内容,如果未能解决你的问题,请参考以下文章

keil C51 和 MDK 区别在哪 ?

Keil 单片机C语言编译软件的使用(涉及指针数组)

关于基于C语言的单片机keil编程问题.

KEIL软件的使用

keil怎样把C语言转换成单片机汇编语言

keil中callstack在哪