电子工程技师.docx
- 文档编号:4382453
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:31
- 大小:16.95KB
电子工程技师.docx
《电子工程技师.docx》由会员分享,可在线阅读,更多相关《电子工程技师.docx(31页珍藏版)》请在冰点文库上搜索。
电子工程技师
判断P0.0口的电平,如为高,则P1口的数据循环递增,如为低,则P1口的数据循环递减
#include
sbitsel=P0^0;
voidmain()
{
P1=0x00;
while
(1)
{
if(sel==1)
{P1=P1+1;
if(P1==0xFF)
P1=0X00;
}
else
{P1=P1-1;
if(P1==0x00)
P1=0xFF;
}
}
}
让第一个发光二极管以间隔1S亮灭闪动
#include
#defineuintunsignedint
sbitled1=P1^0;
uinti,j;
voidmain()
{
while
(1)
{
led1=0;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
led1=1;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
}
}
让第一个发光二极管以间隔500ms亮灭闪动,(调用子函数)
#include
#defineuintunsignedint
sbitled1=P1^0;
voiddelay1s();
voidmain()
{
while
(1)
{
led1=0;
delay1s();
led1=1;
delay1s();
}
}
voiddelay1s()
{
uinti,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
让第一个发光二极管以间隔200ms亮,以间隔800ms灭,闪动(即参数改变了)
#include
#defineuintunsignedint
sbitled1=P1^0;
voiddelayms(uint);
voidmain()
{
while
(1)
{
led1=0;
delayms(200);
led1=1;
delayms(800);
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
数码管动态显示,第一个数码管显示1,时间为0.5s,然后关闭他,第二个数码管显示2,时间为0.5s,然后关闭他.。
。
。
。
。
。
。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voidmain()
{
while
(1)
{
dula=1;
P0=table[1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(500);
dula=1;
P0=table[2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(500);
dula=1;
P0=table[3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(500);
dula=1;
P0=table[4];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(500);
dula=1;
P0=table[5];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(500);
dula=1;
P0=table[6];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(500);
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
左移程序:
#include
#defineucharunsignedchar
uchara;
voidmain()
{
a=0xaa;
while
(1)
{
a=a<<1;
}
}
右移程序:
(略)
利用自带库函数_crol_(),以间隔500ms,实现流水灯城西(注:
编译后不对)
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voiddelayms(uint);
ucharaa;
voidmain()
{
aa=0xfe;
while
(1)
{
P1=aa;
delayms(500);
aa=_crol_(aa,1);
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
让第一个数码管显示数字8
#include
sbitdula=P2^6;
sbitwela=P2^7;
voidmain()
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=0x7;
dula=0;
while
(1);
}
六个数码管同时点亮,依次显示0到F,时间间隔为0.5s,循环下去
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
ucharnum;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voidmain()
{wela=1;
P0=0xc0;
wela=0;
while
(1)
{for(num=0;num<16;num++)
{dula=1;
P0=table[num];
dula=0;
delayms(500);
}
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
判断P0.0口的电平,如为高,则P1口的数据循环递增,如为低,则P1口的数据循环递减
#include
sbitsel=P0^0;
voidmain()
{
P1=0x00;
while
(1)
{
if(sel==1)
{P1=P1+1;
if(P1==0xFF)
P1=0X00;
}
else
{P1=P1-1;
if(P1==0x00)
P1=0xFF;
}
}
}
让第一个发光二极管以间隔1S亮灭闪动
#include
#defineuintunsignedint
sbitled1=P1^0;
uinti,j;
voidmain()
{
while
(1)
{
led1=0;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
led1=1;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
}
}
让第一个发光二极管以间隔500ms亮灭闪动,(调用子函数)
#include
#defineuintunsignedint
sbitled1=P1^0;
voiddelay1s();
voidmain()
{
while
(1)
{
led1=0;
delay1s();
led1=1;
delay1s();
}
}
voiddelay1s()
{
uinti,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
让第一个发光二极管以间隔200ms亮,以间隔800ms灭,闪动(即参数改变了)
#include
#defineuintunsignedint
sbitled1=P1^0;
voiddelayms(uint);
voidmain()
{
while
(1)
{
led1=0;
delayms(200);
led1=1;
delayms(800);
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
数码管动态显示,第一个数码管显示1,时间为0.5s,然后关闭他,第二个数码管显示2,时间为0.5s,然后关闭他.。
。
。
。
。
。
。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voidmain()
{
while
(1)
{
dula=1;
P0=table[1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(500);
dula=1;
P0=table[2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(500);
dula=1;
P0=table[3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(500);
dula=1;
P0=table[4];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(500);
dula=1;
P0=table[5];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(500);
dula=1;
P0=table[6];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(500);
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
利用定时器0工作方式1实现第一个发光管以1s亮灭闪烁(方法一)
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitled1=P1^0;
ucharnunm;
voidmain()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while
(1);
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{num=0;
led1=~led1;
}
}
(方法二)在主程序中完成的功能就不在中断函数中写
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitled1=P1^0;
ucharnunm;
voidmain()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while
(1);
{
if(num==20)
{num=0;
led1=~led1;
}
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}
用定时器0的方式1实现第一个发光管以200MS间隔闪烁,用定时器1的方式1实现数码管前两位59s循环计时。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitled1=P1^0;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voiddisplay(uchar,uchar);
ucharnum,num1,num2,shi,ge;
voidmain()
{
TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while
(1)
{
display(shi,ge);
}
}
voiddisplay(ucharshi,ucharge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==4)
{
num1=0;
led1=~led1;
}
}
voidT1_time()interrupt3
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num2++;
if(num2==20)
{
num2=0;
num++;
if(num==60)
num=0;
shi=num/10;
ge=num%10;
}
}
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uint);
ucharnumt0,num;
voiddisplay(ucharnumdis)
{
ucharshi,ge;
shi=numdis/10;
ge=numdis%10;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidinit()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
voidkeyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
num++;
if(num==60)
num=0;
while(!
key1);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
if(num==0)
num=60;
num--;
while(!
key2);
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
num=0;
while(!
key3);
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
while(!
key4);
TR0=~TR0;
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
display(num);
}
}
voidT0_time()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(numt0==20)
{
numt0=0;
num++;
if(num==60)
num=0;
}
}
用数码管的前两位显示一个十进制数,变化范围为00~59,开设时显示00,每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归零;每按下S5键一次,利用定时器功能使数值开始自动每秒加1;再次按下S5键一次,数值停止自动加1,保持显示的原数。
(编译不对)
以下是对的
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitkey1=P3^0;
sbitkey2=P3^4;
sbitkey3=P3^5;
sbitkey4=P3^6;
sbitdula=P2^1;
sbitwela=P2^0;
ucharcodetable[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
voiddelayms(uint);
ucharnumt0,num;
voiddisplay(ucharnumdis)
{
ucharshi,ge;
shi=numdis/10;
ge=numdis%10;
dula=0;
P0=table[shi];
dula=1;
P0=0x00;
wela=0;
P0=0x01
wela=1;
delayms(5);
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=115;j>0;j--);
}
voidinit()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
voidkeyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
num++;
if(num==60)
num=0;
while(!
key1);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
if(num==0)
num=60;
num--;
while(!
key2);
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
num=0;
while(!
key3);
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
while(!
key2);
TR0=~TR0;
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
display(num);
}
}
voidT0_time()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(numt0==20)
{
numt0=0;
num++;
if(num==60)
num=0;
}
}
设系统时钟频率为12MHz,用T0编程实现从P1.0输出周期为500us的方波
#include
sbitP1_0=P1^0;
voidmain()
{
TMOD=0X02;
TH0=0X06;
TL0=0X06;
EA=1;
ET0=1;
TR0=1;
while
(1);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 工程 技师