单片机代码Word格式文档下载.docx
- 文档编号:17619936
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:28
- 大小:272.74KB
单片机代码Word格式文档下载.docx
《单片机代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机代码Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 代码