1#include<reg52.h>
2#define uc unsigned char
3#define ui unsigned int
4sbit fmq=P3^6;
5void delay500us() //500us延时函数
6{
7uc j;
8for(j=0;j<56;j++)
9{
10}
11}
12void beep() //蜂鸣器产生1Khz的声音
13{
14fmq=0;
15delay500us();
16fmq=1;
17delay500us();
18}
19uc code s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
20void delay1ms(ui i) //一毫秒延时程序
21{
22uc j;
23while(i--)
24 {
25 for(j=0;j<113;j++)
26 {
27 }
28 }
29}
30void main()
31{
32uc i;
i=1;
33while(i<2)
34 {
35 P2=0x7f;
36 for(i=0;i<10;i++)
37 {
38 P0=s8[i];
39 delay1ms(500);
40 i=i++;
41 }
42 }
43while(1)
44{
45ui i;
46for(i=0;i<1000;i++)
47{
48beep();
49}
50fmq=0;
51delay1ms(1000);
52}
53}
一、我想问下每次定义变量都能管到哪里?比如第7行定义uc j;第22行还用定义一遍吗?还是第7行的uc j;仅仅在500us这个延时函数中管用,后面函数要用还得再定义一遍?
二、20行定义了ui i 32行又把i定义成了uc i;二者不矛盾吗?
三、while循环中可以再嵌套一个while循环吗?就是同名的循环可以嵌套吗?可以无限嵌套吗?
四、40行语句有错误吗?能直接写成i++;吗?
五、32行下面不写i=1;程序也能正常运行,为什么?
六、32行定义了uc i;33行和36行中的i的定义都来自32行的吗?如果是同一个i,33行>=2就跳出while了,而36行中i>=10才会结束for,这二者之间又有矛盾吗?
想问下如果只用到这个程序里的知识,能不能再给四位数码管编一个从0~9999现实的程序?
追答可以,最简单的办法就是再加三个独立的数码管,分别赋值,就可以显示了,但通常都是采用动态显示的方法,减少IO口的使用,这个在硬件上要加器件