单片机程序源代码

  • 格式:docx
  • 大小:18.09 KB
  • 文档页数:10

单片机程序源代码

第二章

任务一:闪烁广告灯的设计

利用89C51单片机的端口控制两个LED ( DO和D1 ),编写程序,实现两个LED互闪。

#include

#define uint unsigned int

#define uChar unsigned Char

sbit LED仁POP;

sbit LED2=P0A1;

void delayms(uint ms)

{

uint i;

while(ms--)

{

for(i=O;i<12O;i++);

}

}

void main()

{

while(1)

{

LED1=O;

LED2=1;

delayms(5OO);

LED1=1;

LED2=O;

delayms(5OO);

} }

任务二:流水广告灯的设计

利用89c51单片机的端口控制8个LED( D0~D7 )循环点亮,刚开始时DO点亮,延时片刻后,接着D1 点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4

->D3->D2->D1->DO ,重复循环。

#include

#include

#define uint unsigned int

#define uchar unsigned char

uint i;

uchar temp;

uint a[8]={Oxfe,Oxfd,Oxfb,Oxf7,Oxef,Oxdf,Oxbf,Ox7f};

void delayms(uint ms)

{

while(ms--)

{ uint j;

for(j=0;j<120;j++);

}

}

void main()

{

while(1)

{

P0=0xfe; while(P0!=0x7f) {

//P1=temp;

//delayms(500);

P0=_crol_(P0,1); delayms(250);

}

temp=0x7f; while(P0!=0xfe)

{

P0=temp; delayms(500); temp=_cror_(temp,1);

}

}

}

任务三:拉幕式与闭幕式广告灯的设计

利用89C51单片机的P0端口实现8个LED D0~D7的拉幕式与闭幕式广告灯设计。

拉幕式:开始D0~D7 全灭,延时片刻后首先D3 和D4 亮,其次是D2 和D5 亮,再是D1 和D6 亮,最后是D0 和D7 亮。

闭幕式:开始D0~D7 全亮,延时片刻后首先D0 和D7 灭,其次是D1 和D6 灭,再是D2 和D5 灭,最后是D3 和D4 灭。

#inClude

#define uint unsigned int

#define uChar unsigned Char

uChar Code table[]={0xe7,0xC3,0x81,0x00};

void delay(uint x)

{

uint i,j;

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

for(j=120;j>0;j--);

}

void main()

uint i;

while(1)

{

P1=0xff;

delay(500);

for(i=0;i<4;i++) {

P1=table[i];

delay(500);

}

for(i=3;i>0;i--)

{

P1=table[i-1]; delay(500);

}

}

}

任务四:复杂广告灯的设计

利用89c51 单片机的端口实现8 个LED(D0~D7 )复杂广告灯的控制,要求显示规律为:正向流水-> 反向流水-> 隔灯闪烁3 次-> 高四盏、低四盏闪烁2次-> 隔两盏闪烁3次,再重复循环。

#include

#define uint unsigned int

#include

void delayms(uint ms)

{

uint i;

while(ms--)

{

for(i=0;i<110;i++);

}

}

void main()

{

uint i,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};

unsigned char aa;

while(1) {

aa=0xfe;

for(i=0;i<7;i++)

P0=aa;

aa=_crol_(aa,1);

{

} {delayms(500);

for(i=0;i<8;i++)

{

P0=aa; aa=_cror_(aa,1); delayms(500);

}

for(i=0;i<3;i++) for(j=0;j<2;j++) {

P0=xx[j]; delayms(500);

} for(i=0;i<2;i++) for(j=0;j<2;j++) { P0=yy[j] ; delayms(500);

} for(i=0;i<3;i++) for(j=0;j<2;j++) {

P0=zz[j] ; delayms(500);

}

}

} 任务五:单个LED 数码管显示设计使用89c51 的P0 口作为输出口,外接LED 数码管,编写程序,使数码管循环显示从的加 1 计数。

#include

#define uint unsigned int

#define uchar unsigned char

uchar table[10]={ 0XC0,0XF9,0XA4,0XB0,

0X99,0X92,0X82,0XF8, 0X80,0X90};

uint key=0;

void int_int()

EA=1;

IT0=1;

EX0=1; 0~9

}

void count_num() interrupt 0

{

if(key==9)key=0;

else key++;

}

void main()

{

int_int();

while(1)

{

P0=table[key];

}

}

任务六:多个LED 数码管显示设计

使用单片机P0 和P2 口作为输出口,外接一个8 位LED 数码管,编写程序,使数码管显示“872AF635 ”。

#include

#include

#define uint unsigned int

#define uchar unsigned char

delay(ms)

{

while(ms--)

{ int i;

for(i=0;i<110;i++);

}

}

main() {

uchar

a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

uchar b[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j;

uint i;

while(1)

{ j=0x01;

for(i=0;i<8;i++)

{

P2=j;

P0=a[b[i]]; j=_crol_(j,1);

delay(3);

}

}

任务七:查询式按键设计

将8 个按键从1~8 进行编号,如果其中一个键被按下,则在LED

数码管上显示相应的键值。

#include

#define uint unsigned int

#define uchar unsigned char

main()

{

uchar

a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

P0=0xff;

while(P0!=0xff)

{ switch(P0)

{case 0xfe: P2=a[1]; break;

case 0xfd:

P2=a[2]; break;

case 0xfb:

P2=a[3]; break;

case 0xf7:

P2=a[4]; break;

case 0xef:

P2=a[5]; break;

case 0xdf:

P2=a[6]; break;

case 0xbf:

P2=a[7]; break;

case 0x7f:

P2=a[8];

}

}

}

任务八:LED 数码管显示矩阵键盘按键的设计

设计一个4*4 的矩阵键盘,以P1.0~P1.3 作为行线,以P1.4~P1.7 作为列线。要求:未按下按键时,LED数码管显示-”,按下按键时,在数码管上显示相应的键值。

#include

#define uchar unsigned char

#define uint unsigned int

uchar

table[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86 ,0 x8e};

uint num=0;

void delay(uint x)