单片机代码Word格式文档下载.docx

上传人:b****6 文档编号:17619936 上传时间:2022-12-07 格式:DOCX 页数:28 大小:272.74KB
下载 相关 举报
单片机代码Word格式文档下载.docx_第1页
第1页 / 共28页
单片机代码Word格式文档下载.docx_第2页
第2页 / 共28页
单片机代码Word格式文档下载.docx_第3页
第3页 / 共28页
单片机代码Word格式文档下载.docx_第4页
第4页 / 共28页
单片机代码Word格式文档下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

单片机代码Word格式文档下载.docx

《单片机代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机代码Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。

单片机代码Word格式文档下载.docx

P0=tmp;

花样流水灯显示(130种花样显示)

//数组定义

uinti=0;

while(i<

130)

P0=led_light[i];

delay_ms(200);

i++;

}

第二次实验数码管的应用

8个数码管同时以1秒的速度变化显示0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。

//7位数码管一同显示共阴极接

ucharcodeled_dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76}

uinti;

P0=0x00;

for(i=0;

i<

16;

i++)

{

WM=0;

P0=led_dm[i];

delay_ms(400);

//延时400ms

}

第一秒钟右边第一位显示0,第二秒钟右边两位显示1,第三秒钟右边三位显示2,第八秒钟所有数码管同时显示7,然后循环显示。

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

//0到f

ucharcodeled_wm[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

uinti,j;

for(i=0;

P2=led_wm[i%8];

delay_ms(500);

};

0~999999范围内的计数器。

数字变化频率自定

ucharcodeled_dm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

ucharcodeled_wm[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uintcount=0;

uintlight=0;

voiddelay(uint);

voidshow(uint);

voidinit();

sbitKEY=P3^6;

uintcount=0;

show(count);

count++;

voidshow(uintnum)//显示数字

uinti=0;

uinttnum=num;

while(tnum/10){

tnum/=10;

++i;

switch(i)

case5:

//显示第六位

KEY=0;

P0=led_dm[num/100000];

P2=led_wm[5];

delay_ms

(1);

KEY=1;

case4:

P0=led_dm[(num/10000)%10];

P2=led_wm[4];

case3:

P0=led_dm[(num/1000)%10];

P2=led_wm[3];

case2:

P0=led_dm[(num/100)%10];

P2=led_wm[2];

case1:

P0=led_dm[(num/10)%10];

P2=led_wm[1];

case0:

//显示第一位

//关闭锁存器

P0=led_dm[num%10];

P2=led_wm[0];

//打开锁存器

delay_ms(10);

//延时10ms

第三次定时计数器的应用

第一题:

流水灯以1s的速度变化

//共阳极接法

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

uinti=0;

init();

while

(1){

if(count==20){//1s延时50ms*20

count=0;

P3=led_light[i];

if(i==16){

i=0;

}

voidinit()//定时器初始化

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

voidtimer0()interrupt1

count++;

第二题:

数码管依次以1s显示0到f

if(count==20){

{延时代码通上题}

第四次使用

按键依次显示0-f

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

if(key==0){

delay_ms(5);

if(key==0){

P0=led[i];

i++;

if(i==16)

while(!

key);

//延时清除

矩阵键盘的应用

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

uchartemp;

uintNUM=0;

While

(1){

keyword();

};

voidkeyword(void)//键盘函数

{

//显示0-3

P3=0xfe;

temp=P3;

temp=temp&

0xf0;

if(temp!

=0xf0){

temp=P3;

temp=temp&

if(temp!

switch(P3){

case0xee:

NUM=0;

break;

case0xde:

NUM=1;

case0xbe:

NUM=2;

case0x7e:

NUM=3;

}

//显示4-7

P3=0xfd;

case0xed:

NUM=4;

case0xdd:

NUM=5;

case0xbd:

NUM=6;

case0x7d:

NUM=7;

//显示8-11

P3=0xfb;

case0xeb:

NUM=8;

case0xdb:

NUM=9;

case0xbb:

NUM=10;

case0x7b:

NUM=11;

//显示12-15

P3=0xf7;

case0xe7:

NUM=12;

case0xd7:

NUM=13;

case0xb7:

NUM=14;

case0x77:

NUM=15;

}

P0=led_dm[NUM];

第5次实验

1602的时钟显示

//日期位置

#defineYEAR0x80+0x00+0x02

#defineMONTH0x80+0x00+0x07

#defineDAY0x80+0x00+0x0a

//时间位置

#defineHOUR0x80+0x40+0x03

#defineMINUTE0x80+0x40+0x06

#defineSEC0x80+0x40+0x09

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

//时钟初始值

uinthours=23;

//小时

uintminute=59;

//分钟

uintsec=0;

//秒

//按钮

sbitmenu=P3^0;

//功能键

sbitnext=P3^1;

//调上

sbitpre=P3^2;

//调下

uintclick=0;

voidwirte_position(ucharindex,ucharvalue);

voiddelay_ms(uint);

voidwrite_common(uchar);

voidwrite_data(uchar);

voidt_init();

//定时器初始化50ms

voidshowtime();

//显示时间

voidclickDown();

//按下按钮

voidaddmin(uintc);

/*

*第一步显示模式设置初始化0x38

*第二步显示开/关光标设置

*第三步光标指针移动左移或右移

*第四步数据指针设置(光标显示位置)

*/

t_init();

clickDown();

addmin(click);

voidwrite_data(uchardat)

RS=1;

P0=dat;

delay_ms(5);

E=1;

E=0;

voidinit()

RW=0;

//写指令和写数据的状态的状态的都是低电平

write_common(0x38);

//1.初始化指令

write_common(0x0c);

//2.开显示,显示光标,光标闪烁

write_common(0x06);

//3.指针光标加一且左移

//日期初始化

wirte_position(YEAR,'

2'

);

write_data('

0'

1'

-'

9'

p'

m'

//时钟初始化

wirte_position(HOUR,'

:

'

voidwirte_position(ucharindex,ucharvalue)//定位值写入

write_common(index);

write_data(value);

voidwrite_common(ucharcom)//写入配置

RS=0;

P0=com;

TH0=(65536-50000)/256;

if(count==20)

count=0;

sec++;

if(sec>

59){

sec=0;

minute++;

if(minute>

minute=0;

hours++;

if(hours>

23){

hours=0;

showtime();

voidshowtime()//显示时钟

wirte_position(HOUR,(hours)/10+0x30);

wirte_position(HOUR+0x01,(hours)%10+0x30);

wirte_position(MINUTE,(minute/10+0x30));

wirte_position(MINUTE+0x01,(minute%10+0x30));

wirte_position(SEC,(sec/10+0x30));

wirte_position(SEC+0x01,(sec%10+0x30));

voidclickDown()//功能键按下

//staticuintclick=0;

if(menu==0){

delay_ms(5);

if(menu==0){

click++;

if(click==1){

TR0=0;

//定时器停止

write_common(0x0f);

write_common(SEC+0x01);

}elseif(click==2){

write_common(MINUTE+0x01);

}elseif(click==3){

write_common(HOUR+0x01);

if(next==0){

delay_ms(5);

if(next==0){

delay_ms(5);

hours++;

showtime();

}

if(pre==0){

delay_ms(5);

if(pre==0){

hours--;

}

}else{

click=0;

TR0=1;

write_common(0x0c);

}

}if(menu==0){

while(menu==0);

voidaddmin(uintc)//增加或者减少键按下

switch(c){

if(next==0){//按下加一

delay_ms(10);

if(next==0){

delay_ms(10);

sec++;

if(sec>

59)

sec=0;

showtime();

}while(next==0){

};

if(pre==0){//按下减一

if(pre==0){

sec--;

if(sec==-1)

sec=59;

}while(pre==0){

};

break;

case2:

minute++;

if(minute>

minute=0;

write_common(MINUTE+0x01);

minute--;

if(minute==-1)

minute=59;

case3:

hours++;

if(hours>

23)

hours=0;

write_common(HOUR+0x01);

hours--;

if(hours==-1)

hours=23;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1