第4章-C語言基礎以及流水燈的實現(xiàn)
c語言基礎知識,省略,都會
keil調試,省略,幾乎不用,也不好用



課后作業(yè)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;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}