c语言定义数组存在问题,关于数组定义问题

本文探讨了在单片机程序中遇到的定时器计数问题,无论将计数变量类型设置为int、uint还是long,计数到256后都会重置为0。同时,介绍了如何通过优化代码来实现液晶屏显示多位数字的方法,以达到显示更大数值的目的。代码示例展示了如何处理定时器溢出和液晶显示的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回复 2楼 rjsp

您好,麻烦再看看。1)我是先定义的uchar k[3],所以后面直接赋值,可是如图那样出现语法错误,您所说的定义一样出现语法错误,而下文所写编译成功。2)还有一个问题,用b计数定时器0溢出次数,无论把b定义成int,uint还是long,都是计数显示到256便重0开始,我不清楚是什么原因,怎么才能把b变成16位二进制数,使他能计数到999,再往上计数到9999之类的该怎么处理。十分感谢!!!

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit we = P2^7;

sbit du = P2^6;

sbit LED1=P1^0;

sbit key_s2=P3^0;

sbit key_s3=P3^1;

sbit key_s4=P3^2;

uchar code leddata[]={

0x3F,  //"0"

0x06,  //"1"

0x5B,  //"2"

0x4F,  //"3"

0x66,  //"4"

0x6D,  //"5"

0x7D,  //"6"

0x07,  //"7"

0x7F,  //"8"

0x6F,  //"9"

0x77,  //"A"

0x7C,  //"B"

0x39,  //"C"

0x5E,  //"D"

0x79,  //"E"

0x71,  //"F"

0x76,  //"H"

0x38,  //"L"

0x37,  //"n"

0x3E,  //"u"

0x73,  //"P"

0x5C,  //"o"

0x40,  //"-"

0x00,  //熄灭

0x00  //自定义

};

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=114;y>0;y--);

}

void display(uchar i)

{

uchar bai,shi,ge,w,e,k[3];

bai=i/100;

shi=i%100/10;

ge=i%10;

k[0] = bai;

k[1]=shi;

k[2]=ge;

for(w=0;w<3;w++)

{

P0=0xff;

e=0xfe;

we=1;

P0=_crol_(e,w);

we=0;

du=1;

P0=leddata[k[w]];

du=0;

delay(2);

}

w=0;

}

void main()

{

uchar a;

uint b;

TR0=1;

TMOD=0x61;

TH0=0x4b;

TL0=0xfc;

while(1)

{

if(key_s2==0)

{

delay(5);

if(key_s2==0)

{

TR0=0;

}

}

if(key_s3==0)

{

delay(5);

if(key_s3==0)

{

TR0=1;

}

}

if(TF0==1)

{

TH0=0x4b;

TL0=0xfc;

TF0=0;

a++;b++;

}

if(a==2)

{

a=0;

LED1=~LED1;

}

display(b);

if(key_s4==0)

{

delay(5);

if(key_s4==0)

{

b=0;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值