第4章-C语言基础以及流水灯的实现
c语言基础知识,省略,都会
keil调试,省略,几乎不用,也不好用



课后作业4流水灯右移
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
sbit led = P0 ^ 0;
void Delay500ms() //@11.0592MHz
{
unsigned char data i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void main(void)
{
ENLED = 0; // 138总开关打开
ADDR3 = 1; // 1110是LED的译码输出:14,选通LED的供电
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
// 流水灯右移
P0 = 0x7F; // 0111-1111
Delay500ms();
P0 = 0xBF; // 1011-1111
Delay500ms();
P0 = 0xDF; // 1101-1111
Delay500ms();
P0 = 0xEF; // 1110-1111
Delay500ms();
P0 = 0xF7; // 1111-0111
Delay500ms();
P0 = 0xFB; // 1111-1011
Delay500ms();
P0 = 0xFD; // 1111-1101
Delay500ms();
P0 = 0xFE; // 1111-1110
Delay500ms();
// 返回第一部
}
}
//第二种方法
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
sbit led = P0 ^ 0;
void Delay500ms() //@11.0592MHz
{
unsigned char data i, j, k;
//_nop_();
i = 4; j = 129; k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void main(void)
{
char cnt;
ENLED = 0; // 138总开关打开
ADDR3 = 1; // 1110是LED的译码输出:14,选通LED的供电
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
cnt=7;
while (1)
{
// 流水灯右移
P0= ~(1<<cnt);
Delay500ms();
cnt--;
if(cnt<0)
{
cnt=7;
}
// 返回第一步
}
}
课后第五题,左移到头,接着右移,,,反复
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
sbit led = P0 ^ 0;
void Delay500ms() //@11.0592MHz
{
unsigned char data i, j, k;
//_nop_();
i = 4; j = 129; k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void main(void)
{
ENLED = 0; // 138总开关打开
ADDR3 = 1; // 1110是LED的译码输出:14,选通LED的供电
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
P0=0xFE;//1111-1110
Delay500ms();
P0=0xFD;//1111-1101
Delay500ms();
P0=0xFB;//1111-1011
Delay500ms();
P0=0xF7;//1111-0111
Delay500ms();
P0=0xEF;//1110-1111
Delay500ms();
P0=0xDF;//1101-1111
Delay500ms();
P0=0xBF;//1011-1111
Delay500ms();
P0=0x7F;//0111-1111
Delay500ms();
P0=0xBF;//1011-1111
Delay500ms();
P0=0xDF;//1101-1111
Delay500ms();
P0=0xEF;//1110-1111
Delay500ms();
P0=0xF7;//1111-0111
Delay500ms();
P0=0xFB;//1111-1011
Delay500ms();
P0=0xFD;//1111-1101
Delay500ms();
//返回第一步
}
}
//第二种方法
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;
sbit led = P0 ^ 0;
void Delay500ms() //@11.0592MHz
{
unsigned char data i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void main(void)
{
char cnt;
ENLED = 0; // 138总开关打开
ADDR3 = 1; // 1110是LED的译码输出:14,选通LED的供电
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
cnt = 0;
while (1)
{
P0 = ~(1 << cnt);
Delay500ms();
cnt++;
if (cnt == 8)
{
break;
}
}
cnt = 6;
while (1)
{
P0 = ~(1 << cnt);
Delay500ms();
cnt--;
if (cnt == 0)
{
break;
}
}
}
}