您的当前位置:首页二极管作业

二极管作业

2020-01-01 来源:乌哈旅游
 二极管作业

1、将发光二极管的1、3、5、7点亮,5s钟以后点亮2、4、6、8个发光二极管,以此循环。 delayl(300); P1=0X40; delayl(300); #include

sbit lead_choose=P2^2; #define uint unsigned int void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void main() {

P1=0X55; while(1) {

P1=0x55;

delayl(2500); P1=0xAA;

delayl(2500); } }

2、将发光二极管按二进制数从1依次递加,一直显示到32,并从头循环。 #include

#define uint unsigned int sbit lead_choose=P2^2; void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void main() {

P1=0x01; while(1) {

P1=0x01; delayl(300); P1=0X02;

delayl(300); P1=0X04;

delayl(300); P1=0X08;

delayl(300); P1=0X10; delayl(300); P1=0X20;

P1=0X80; delayl(300); } }

3、点亮发光二极管的低四位,并每隔500ms的时间闪烁,高四位常亮。 #include

sbit lead_choose=P2^2; #define uint unsigned int void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void main() {

P1=0xFF; while(1) {

P1=0xfF; delayl(500); P1=0xf0; delayl(500); } }

4、让两端的发光二极管先亮,然后向内相向移动,最后再弹开,并依次循环。即1、8亮,2、7亮,3、6亮,4、5亮,然后循环。 #include

sbit lead_choose=P2^2; #define uint unsigned int void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void main() {

P1=0x81; while(1) {

P1=0x81; delayl(300); P1=0x42; delayl(300);

P1=0x24; delayl(300); P1=0X18; delayl(300); } }

5、点亮1、2个发光二极管,并两个一起向左移动,到达7、8后,再反向回移,最终循环. uchar happy[]=

{0x76,0x77,0x73,0x73,0x6e};

uchar hello[]=

{0x76,0x79,0x38,0x38,0x3f};

uchar m; uint i;

void delayl(uint n) {

#include

sbit lead_choose=P2^2; #define uint unsigned int #include void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void main() {

uint i,j; P1=0x03; while(1) {

i=0x03; for(j=0;j<7;j++) {

P1=_crol_(i,j); delayl(300); }

i=0xc0;

for(j=0;j<7;j++) {

P1=_cror_(i,j);

delayl(300); } } }

数码管作业

1、让数码管的第2位显示出字符“H”延时2s后显示出字符“L”,再延时2s后显示字符“y”,并循环。

#include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1;

sbit duan=P2^0; uchar mazhi_wei[]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; uint i,j;

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

for(j=114;j>0;j--); }

void STC_init() {

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; }

void main() {

STC_init(); while(1) {

wei=1;

P0=mazhi_wei[1]; wei=0; duan=1;

P0=happy[0]; duan=0;

delayl(2000); duan=1;

P0=hello[2]; duan=0;

delayl(2000); duan=1;

P0=happy[4]; duan=0;

delayl(2000); } }

2、让数码管的1、3、5位显示出字符“0-9”,并循环,单个字符延时时间自定。 #include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]=

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c, } }

3、让第1个数码管显示1,延时1s后,第 20x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void STC_init() {

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; }

void display(uchar weil,uchar duanl,

bit dp)

{

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

void main() {

uchar i,j; STC_init(); while(1) {

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

for(j=57;j>0;j--) {

display(1,i,0); delayl(2);

display(3,i,0); delayl(2);

display(5,i,0); delayl(2); } } 个显示2,然后再延时1s„„第6个显示6,延时1s后循环。 #include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff};

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void STC_init() {

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; }

void display(uchar weil,uchar duanl,bit dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

void main() {

uchar i; STC_init(); while(1) {

for(i=1;i<7;i++) {

display(i,i,0);

delayl(1000); } } }

4、点亮6个数码管,显示“654321”。 #include

#define uint unsigned int #define uchar unsigned char sbit duan=P2^0; sbit wei=P2^1;

void delayl(uint n) {

uint i,j;

for(i=n;i>0;i--) for(j=114;j>0;j--); }

void main() {

P1=0x00; wei=1; P0=0xfe; wei=0; duan=1; P0=0x7d; duan=0; delayl(1);

wei=1; P0=0xfd; wei=0; duan=1; P0=0x6d; duan=0;

delayl(1);

wei=1; P0=0xfb; wei=0; P0=0x66; duan=1; delayl(1);

wei=1; P0=0xf7; wei=0; duan=1; P0=0x4f; duan=0; delayl(1);

wei=1; P0=0xef; wei=0; duan=1; P0=0x5b; duan=0; delayl(1);

wei=1; P0=0xdf; wei=0; duan=1; P0=0x06; duan=0; delayl(1); }

5、做一个30s的时钟,并显示在数码管上,到达30s后,数码管显示“HELLO”,延时2s再显示“HAPPY”。 #include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00}; uchar

mazhi_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; uchar

happy[]={0x76,0x77,0x73,0x73,0x6e}; uchar

hello[]={0x76,0x79,0x38,0x38,0x3f}; void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void STC_init()

{

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; }

void display(uchar weil,uchar duanl,bit {

j=0;

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

{ display_hellohappy(1,0,0);

delayl(2);

display_hellohappy(2,1,0); dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

void display_hellohappy(uchar weil,uchar duanl,bit i) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(i==0)

P0=hello[duanl]; else

P0=happy[duanl]; duan=0; }

void main() {

uchar i,j; STC_init(); while(1) {

j++;

if(j<=30) {

for(i=250;i>0;i--) {

display(1,j/10,0); delayl(2);

display(2,j%10,0); delayl(2); } } else delayl(2);

display_hellohappy(3,2,0); delayl(2);

display_hellohappy(4,3,0); delayl(2);

display_hellohappy(5,4,0); delayl(2); }

for(i=200;i>0;i--) {

display_hellohappy(1,0,1); delayl(2);

display_hellohappy(2,1,1); delayl(2);

display_hellohappy(3,2,1); delayl(2);

display_hellohappy(4,3,1); delayl(2);

display_hellohappy(5,4,1); delayl(2); } } } }

键盘作业 一、扫描法键盘程序 #include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c, case 0x7e:keynum=4;break; 0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]= {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; void delayl(uint n) { uint i,j; for(i=n;i>0;i--) for(j=114;j>0;j--); } void STC_init() { P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; } void display(uchar weil,uchar duanl, bit dp) { wei=1; P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1) P0=(mazhi_duan[duanl]|0x80); else P0=mazhi_duan[duanl]; duan=0; } uchar keyscan() { uchar keynum,temp; keynum=0; P1=0xfe; delayl(5); //抗干扰 temp=P1&0xf0; if(temp!=0xf0) { P1=0xfe; delayl(5); temp=P1&0xf0; if(temp!=0xf0) { temp|=0x0e; switch(temp) { case 0xee:keynum=1;break; case 0xde:keynum=2;break; case 0xbe:keynum=3;break; default:keynum=0;break; } } } P1=0xfd; delayl(5); //抗干扰 temp=P1&0xf0; if(temp!=0xf0) { P1=0xfd; delayl(5); temp=P1&0xf0; if(temp!=0xf0) { temp|=0x0d; switch(temp) {

case 0xed:keynum=5;break;

case 0xdd:keynum=6;break; case 0xbd:keynum=7;break; case 0x7d:keynum=8;break; default:keynum=0;break; } } } P1=0xfb; delayl(5); //抗干扰 temp=P1&0xf0; if(temp!=0xf0) { P1=0xfb; delayl(5); temp=P1&0xf0; if(temp!=0xf0) { temp|=0x0b; switch(temp) { case 0xeb:keynum=9;break; case 0xdb:keynum=10;break; case 0xbb:keynum=11;break; case 0x7b:keynum=12;break; default:keynum=0;break; } } } P1=0xf7; delayl(5); //抗干扰 temp=P1&0xf0;

if(temp!=0xf0) for(j=114;j>0;j--); { } P1=0xf7; void STC_init() delayl(5); { temp=P1&0xf0; P1=0x00;//关闭led if(temp!=0xf0) led=0; //锁存 { wei=0; temp|=0x07; duan=0; switch(temp) } { void display(uchar weil,uchar duanl,bit case 0xe7:keynum=13;break; dp) case 0xd7:keynum=14;break; { case 0xb7:keynum=15;break; case 0x77:keynum=16;break; default:keynum=0;break; } } } return keynum; } void main() { uchar num; STC_init(); while(1) { num=keyscan(); display(1,num,0); delayl(50); } } 二、线反转法键盘程序 #include #define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; sbit xiang=P3^7; uchar mazhi_duan[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]= {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; void delayl(uint n) { uint i,j; for(i=n;i>0;i--) wei=1; P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1) P0=(mazhi_duan[duanl]|0x80); else P0=mazhi_duan[duanl]; duan=0; } uchar keyscan1() { uchar keynum,temp; keynum=0; P1=0xf0; delayl(5); temp=P1&0xf0; P1=0x0f; delayl(5); temp|=(P1&0x0f); switch(temp) { case 0xee:keynum=1;break; case 0xde:keynum=2;break; case 0xbe:keynum=3;break; case 0x7e:keynum=4;break; case 0xed:keynum=5;break; case 0xdd:keynum=6;break;

case 0xbd:keynum=7;break; case 0x7d:keynum=8;break; case 0xeb:keynum=9;break; case 0xdb:keynum=10;break; case 0xbb:keynum=11;break; case 0x7b:keynum=12;break; case 0xe7:keynum=13;break; case 0xd7:keynum=14;break; case 0xb7:keynum=15;break; case 0x77:keynum=16;break;

default:keynum=0;break; }

return keynum; }

void main() {

uchar i; STC_init(); /*xiang=0; while(1);*/ while(1) {

i=keyscan1(); display(2,i,0); delayl(50); } }

1、按下第一个键,数码管第一位显示1,按下第二个键,第二位显示2,以此类推,显示到6。

#include

#define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00}; uchar

mazhi_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff};

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void STC_init() {

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; }

void display(uchar weil,uchar duanl,bit dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

uchar keyscan1() {

uchar keynum,temp; keynum=0; P1=0xf0; delayl(5); temp=P1&0xf0; P1=0x0f; delayl(5);

temp|=(P1&0x0f); switch(temp) {

case 0xee:keynum=1;break; case 0xde:keynum=2;break; case 0xbe:keynum=3;break; case 0x7e:keynum=4;break; case 0xed:keynum=5;break; case 0xdd:keynum=6;break; default:keynum=0;break; }

return keynum; }

void main() {

uchar i; STC_init(); while(1) {

i=keyscan1(); if(i==0); else

display(i,i,0); delayl(20); } }

2、设计一个程序,按下第一个键,蜂鸣器响,按下第二个键,蜂鸣器停止响。 #include

#define uchar unsigned char xiang=i; #define uint unsigned int } sbit led=P2^2; } sbit wei=P2^1; 3、设计程序实现以下功能,LED第1位亮,延sbit duan=P2^0; 时0.5s后,第2位亮,延时0.5s后第3位亮„sbit xiang=P3^7; 到第8位后,然后反向,一个周期完以后,倒uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 计时10s,并用数码管显示时间,时间到以后, 蜂鸣器响,按下第5个按键以后,蜂鸣器停止0x66,0x6d,0x7d,0x07, 响,并重新循环。 0x7f,0x6f,0x77,0x7c, #include 0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]= {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; void delayl(uint n) { uint i,j; for(i=n;i>0;i--) for(j=114;j>0;j--); } void STC_init() { P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; } uchar keyscan1() { uchar keynum,temp; P1=0xf0; delayl(5); temp=P1&0xf0; P1=0x0f; delayl(5); temp|=(P1&0x0f); switch(temp) { case 0xee:keynum=0;break; case 0xde:keynum=1;break; } return keynum; } void main() { uchar i; STC_init(); while(1) { i=keyscan1(); #define uchar unsigned char #define uint unsigned int sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; sbit xiang=P3^7; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; void delayl(uint n) { uint i,j; for(i=n;i>0;i--) for(j=114;j>0;j--); } void STC_init() { P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0; } void display(uchar weil,uchar duanl,bit dp) { wei=1; P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1) P0=(mazhi_duan[duanl]|0x80); else P0=mazhi_duan[duanl]; duan=0; }

uchar keyscan1() {

uchar keynum,temp; keynum=0; P1=0xf0; delayl(5); temp=P1&0xf0; P1=0x0f; delayl(5);

temp|=(P1&0x0f); switch(temp) {

case 0xed:keynum=5;break; default:keynum=0;break; }

return keynum; }

void main() {

uchar i,j,k,num; STC_init(); led=1; while(1) {

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

j=0x01; P1=(j<j=0x80; P1=(j>>i); delayl(500); };

delayl(500); for(k=10;k>0;k--)

for(j=250;j>0;j--) {

display(1,k/10,0); delayl(2);

display(2,k%10,0); delayl(2); }

display(2,16,0); delayl(400); while(1) {

xiang=0;

num=keyscan1(); if(num==5) {

xiang=1; break; } }; } }

定时器与中断

1、利用定时/计数器T0从P1.0输出周期为0.5s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。。 #include

#define uint unsigned int #define uchar unsigned char sbit led=P2^2; uchar overflow; void STC_init() {

P1=0x00;//关闭led led=0; //锁存 }

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void light_led(uchar i,bit j) {

led=1; if(j==1) P1=1<P1=P1&(~(1<void main() {

bit flag; STC_init();

TMOD=0x01;//定时器0,方式1 TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//赋初值50ms,11.0592MHz

ET0=1;//打开定时器0中断 EA=1;//打开总中断

TR0=1;//启动定时器0 while(1) {

if(overflow>=10) {

overflow=0; flag=!flag;

light_led(0,flag); } } }

void timer0() interrupt 1 using 1 {

TR0=0;

overflow++;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; }

2、利用定时/计数器T1产生定时时钟,控制8个LED灯从第一个到第八个逐一点亮,单个亮时间为400ms ,并循环。 #include

#define uint unsigned int #define uchar unsigned char sbit led=P2^2; uchar overflow; void STC_init() {

P1=0x00;//关闭led led=0; //锁存 }

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void light_led(uchar i,bit j) {

led=1; if(j==1) P1=1<P1=P1&(~(1<void main() {

uchar i=0; STC_init();

TMOD=0x01;//定时器0,方式1 TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//赋初值50ms,11.0592MHz

ET0=1;//打开定时器0中断 EA=1;//打开总中断 TR0=1;//启动定时器0 while(1) {

if(overflow>=8) {

overflow=0; if(i>=8) i=0;

light_led(i,1); i++; } } }

void timer0() interrupt 1 using 1 {

TR0=0;

overflow++;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; }

3、用定时器0设计一个30s的倒计时时钟,并在数码管上显示,当定时时间到时,蜂鸣器响2s后关闭,并循环。 #include

#define uint unsigned int #define uchar unsigned char sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; sbit xiang=P3^7; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c

0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; uchar overflow; void STC_init() {

P1=0x00;//关闭led

led=0; //锁存 wei=0; duan=0; }

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void light_led(uchar i,bit j) {

led=1; if(j==1) P1=1<P1=P1&(~(1<void display(uchar weil,uchar duanl,bit dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

void main() {

uchar miao=30,i; STC_init();

TMOD=0x01;//定时器0,方式1 TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//赋初值50ms,11.0592MHz

ET0=1;//打开定时器0中断 EA=1;//打开总中断 TR0=1;//启动定时器0 while(1) {

if(overflow>=20) {

overflow=0; miao--; if(miao==0) {

TR0=0; xiang=0;

for(i=100;i>0;i--) {

display(6,miao%10,0); delayl(10);

display(5,miao/10,0); delayl(10); }

xiang=1; miao=30; TR0=1; } }

display(6,miao%10,0); delayl(10);

display(5,miao/10,0); delayl(10); } }

void timer0() interrupt 1 using 1 {

TR0=0;

overflow++;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; }

4、用定时器1设计一个时钟,并用数码管显示时、分、秒等信息。 #include

#define uint unsigned int #define uchar unsigned char sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00}; uchar

mazhi_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff};

uchar overflow; void STC_init() {

P1=0x00;//关闭led led=0; //锁存

wei=0; duan=0; }

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void display(uchar weil,uchar duanl,bit } }

display(6,miao%10,0); delayl(2);

display(5,miao/10,0); delayl(2);

display(4,fen%10,1); delayl(2);

display(3,fen/10,0); delayl(2);

dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1; if(dp==1)

P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

void main() {

uchar miao,fen,shi; shi=0;fen=0;miao=0; STC_init();

TMOD=0x10;//定时器1,方式1 TH1=0x4B;

TL1=0xFD;//赋初值50ms,11.0592MHz ET1=1;//打开定时器1中断 EA=1;//打开总中断 TR1=1;//启动定时器0 while(1) {

if(overflow>=20) {

overflow=0; miao++;

if(miao>=60) {

fen++; miao=0; if(fen>=60) {

shi++; fen=0; if(shi>=23) shi=0; } display(2,shi%10,1); delayl(2);

display(1,shi/10,0); delayl(2); } }

void timer0() interrupt 3 using 3 {

TR1=0;

overflow++; TH1=0x4B; TL1=0xFD; TR1=1; }

5、设计一个带有分、秒的时钟,按下1键以后,能够进入调节时钟的界面,其中第2个键让时钟增加,第6个键让时钟减少,第5个和第7个键分别实现左右移动控制调节时间的某一位,按3键退出该界面,退出后时钟按设定的时间开始运行。 #include

#define uint unsigned int #define uchar unsigned char sbit led=P2^2; sbit wei=P2^1; sbit duan=P2^0; sbit xiang=P3^7; uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00}; uchar mazhi_wei[]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff}; uchar overflow; void STC_init() {

P1=0x00;//关闭led led=0; //锁存 wei=0; duan=0;

}

void delayl(uint n) {

uint i,j;

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

for(j=114;j>0;j--); }

void light_led(uchar i,bit j) {

led=1; if(j==1) P1=1<P0=(mazhi_duan[duanl]|0x80); else

P0=mazhi_duan[duanl]; duan=0; }

uchar keyscan() {

uchar keynum,temp; keynum=0; P1=0xf0; delayl(5);

temp=P1&0xf0; //保留高四位 P1=0x0f; delayl(5);

temp=temp|(P1&0x0f); switch(temp) {

case 0xee:keynum=1;break; case 0xde:keynum=2;break; case 0xbe:keynum=3;break; case 0x7e:keynum=4;break; case 0xed:keynum=5;break; case 0xdd:keynum=6;break; case 0xbd:keynum=7;break; default:keynum=0;break; }

return keynum; }

void main() {

bit flag;

uchar shi,fen,miao,keynum; uchar wei=1,i; STC_init();

TMOD=0x10;//定时器1,方式1 TH1=0x4c;

TL1=0x00;//赋初值50ms,11.0592MHz else

P1=P1&(~(1<void display(uchar weil,uchar duanl,bit dp) {

wei=1;

P0=mazhi_wei[weil-1]; wei=0; duan=1;

ET1=1;//打开定时器1中断 EA=1;//打开总中断 TR1=1;//启动定时器0 shi=0; fen=0; miao=0; while(1) {

if(overflow>=20) {

overflow=0; miao++; if(miao>59) {

miao=0; fen++; if(fen>59) {

fen=0; shi++; if(shi>23) shi=0; } } }

if(keyscan()==1) {

TR1=0; flag=1; while(flag) {

keynum=keyscan(); switch(keynum) { case 2: switch(wei) {

case 1: shi=shi+10; if(shi>=24)

shi=0; break; case 2: shi++;

if(shi>=24) shi=0; break;

case 3: fen=fen+10; if(fen>=60) fen=0; break; case 4: fen=fen+1; if(fen>=60) fen=0; break;

case 5: miao=miao+10; if(miao>=60) miao=0; break;

case 6: miao=miao+1; if(miao>=60) miao=0; break; default:break; }

break;

case 3: flag=0;break; case 5: wei--;

if((wei==0)||(wei>6)) wei=6; break;

case 6: switch(wei) {

case 1: shi=shi-10; if(shi>=24) shi=0; break;

case 2: shi--;

if(shi>=24) shi=0; break;

case 3: fen=fen-10; if(fen>=60) fen=0; break; case 4: fen=fen-1; if(fen>=60) fen=0; break;

case 5: miao=miao-10; if(miao>=60) miao=0; break;

case 6: miao=miao-1; if(miao>=60) miao=0; break; default:break; }

break; case 7: wei++;

if((wei>6)||(wei==0)) wei=1; break;

default:break; }

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

display(1,shi/10,0); delayl(1);

display(2,shi%10,1); delayl(1);

display(3,fen/10,0); delayl(1);

display(4,fen%10,1); delayl(1);

display(5,miao/10,0); delayl(1);

display(6,miao%10,0); delayl(1); } }

TR1=1; }

display(1,shi/10,0); delayl(2);

display(2,shi%10,0); delayl(2);

display(3,fen/10,0); delayl(2);

display(4,fen%10,0); delayl(2);

display(5,miao/10,0); delayl(2);

display(6,miao%10,0); delayl(2); } }

void timer0() interrupt 3 using 3 {

TR1=0;

overflow++; TH1=0x4c; TL1=0x00; TR1=1; }

串口作业 一、串口课堂内容一 #include

#define uint unsigned int #define uchar unsigned char void main() {

TMOD=0x20; //定时器工作方式 TH1=0xf4;

TL1=0xf4; //串口工作方式 SCON=0x40; PCON=0x00;

TR1=1; //开启定时器 REN=1; //开启串口 while(1) {

while(RI==0); RI=0; P1=SBUF; } }

二、串口课堂内容二 #include

#define uint unsigned int #define uchar unsigned char void main() {

uchar dat;

TMOD=0x20; // 定时器工作方式2 TH1=0xf4;

TL1=0xf4; //2400,串口工作方式 SCON=0x40; // 01000000 PCON=0x00; // 加倍 TR1=1; REN=1; while(1) {

while(RI==0); RI=0; dat=SBUF; P1=dat; SBUF=dat; while(TI==0); TI=0; }

}

因篇幅问题不能全部显示,请点此查看更多更全内容