单片机复习code程序.docx

上传人:b****8 文档编号:9012250 上传时间:2023-05-16 格式:DOCX 页数:24 大小:18.30KB
下载 相关 举报
单片机复习code程序.docx_第1页
第1页 / 共24页
单片机复习code程序.docx_第2页
第2页 / 共24页
单片机复习code程序.docx_第3页
第3页 / 共24页
单片机复习code程序.docx_第4页
第4页 / 共24页
单片机复习code程序.docx_第5页
第5页 / 共24页
单片机复习code程序.docx_第6页
第6页 / 共24页
单片机复习code程序.docx_第7页
第7页 / 共24页
单片机复习code程序.docx_第8页
第8页 / 共24页
单片机复习code程序.docx_第9页
第9页 / 共24页
单片机复习code程序.docx_第10页
第10页 / 共24页
单片机复习code程序.docx_第11页
第11页 / 共24页
单片机复习code程序.docx_第12页
第12页 / 共24页
单片机复习code程序.docx_第13页
第13页 / 共24页
单片机复习code程序.docx_第14页
第14页 / 共24页
单片机复习code程序.docx_第15页
第15页 / 共24页
单片机复习code程序.docx_第16页
第16页 / 共24页
单片机复习code程序.docx_第17页
第17页 / 共24页
单片机复习code程序.docx_第18页
第18页 / 共24页
单片机复习code程序.docx_第19页
第19页 / 共24页
单片机复习code程序.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机复习code程序.docx

《单片机复习code程序.docx》由会员分享,可在线阅读,更多相关《单片机复习code程序.docx(24页珍藏版)》请在冰点文库上搜索。

单片机复习code程序.docx

单片机复习code程序

//8255数码管滚动显示20120818

//ALE的作用:

访问片外存储器时,ALE为有效高电平,

//P0口可做外部地址锁存器的锁存信号

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#definePAXBYTE[0xfff8]//111111111111000

#definePBXBYTE[0xfff9]//111111111111001

#defineCOMXBYTE[0xfffb]//111111111111011

ucharcodeweima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阳极

/*ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};//0—F*/

ucharcodeduanma[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xa4,0xc0,0xf9,0xa4,0xc0,0x80,0xf9,0x80,

0xff,0xff,0xff,0xff,0xff,0xff,0xff};

voiddelayms(uintz);

voidmain()

{

uchari,j,k;

P3=0xfe;

COM=0x80;

while

(1)

{

for(j=0;j<10;j++)//为了延长显示时间

{

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

{

PB=weima[i];

PA=duanma[i+k];

delayms

(1);

}

}

k=(k+1)%15;//8+14=22

}

}

voiddelayms(uintz)

{

uchari;

while(z--)

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

}

/*

//锯齿波

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineDAC0832XBYTE[0x7fff]

voidmain()

{

uchari;

while

(1)

{

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

DAC0832=i;

}

}*/

/*

//三角波

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineDAC0832XBYTE[0x7fff]

voiddelayms(uintz);

voidmain()

{

uchari;

while

(1)

{

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

{

DAC0832=i;//没有delayms()函数T=2ms

delayms

(1);//加了delayms()函数T=0.5s

}

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

{

DAC0832=i;

delayms

(1);

}

}

}

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}*/

//梯形

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineDAC0832XBYTE[0x7fff]

voiddelayms(uintz);

voidmain()

{

uchari;

while

(1)

{

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

{

DAC0832=i;//没有delayms()函数T=2ms

//delayms

(1);//加了delayms()函数T=0.5s

}

DAC0832=250;//可以不用

delayms

(1);

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

{

DAC0832=i;

//delayms

(1);

}

}

}

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

//先开输入寄存器,然后关闭输入寄存器,再开DAC寄存器

#include

#include

#defineinput1XBYTE[0x8fff]

#defineinput2XBYTE[0xa7ff]

#defineDACRXBYTE[0x2fff]

#defineuintunsignedint

#defineucharunsignedchar

voiddelayms(uintz);

voidtransmit(uchardate1,uchardate2);

voidmain()

{

uchari,j;

while

(1)

{

for(i=0,j=255;i<255;i++,j--)

{

transmit(i,j);

}

}

}

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

//2路信号

voidtransmit(uchardate1,uchardate2)

{

input1=date1;

input2=date2;

DACR=0;

}

//先开输入寄存器,然后关闭输入寄存器,再开DAC寄存器

#include

#include

#defineinputXBYTE[0x8fff]

#defineDACRXBYTE[0x2fff]

#defineuintunsignedint

#defineucharunsignedchar

sbitkey1=P3^0;

sbitkey2=P3^1;

sbitkey3=P3^3;

sbitkey4=P3^4;zzzx

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

voidmain()

{

uchari,j,k;

while

(1)

{

if(key1==0)

{

i++;

while(!

key1);

}

if(key2==0)

{

i--;

while(!

key3);

}

if(key3==0)

{

j=j+10;

while(!

key1);

}

if(key4==0)

{

j=j-10;

while(!

key3);

}

for(k=0;k<0x80+j;k++)

{

input=k;

DACR=0;

delayms(i);

}

}

}

AT24C02

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineNOP5(){_nop_();_nop_();_nop_();_nop_();_nop_();}

sbitSDA=P2^5;

sbitSCL=P2^6;

voiddelayms(uintz);

voidstart_i2c();

voidstop_i2c();

voidack();

voidnoack();

voidwrite_byte(ucharj);

voidwrite_i2c(ucharadd,uchardate);

ucharread_byte();

ucharread_current();

ucharread_random(ucharadd);

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

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

//显示段码值0~9

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

voidmain()

{

uchari;

SDA=1;

SCL=1;

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

{

write_i2c(i,weima[i]);

write_i2c(i+8,duanma[i]);

}

while

(1)

{

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

{

P1=read_random(i);

P0=read_random(i+8);

delayms(1000);

}

}

}

voiddelayms(uintz)

{

unsignedintx,y;

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

for(y=z;y>0;y--);

}

//主机

voidstart_i2c()

{

SDA=1;

SCL=1;

NOP5();

SDA=0;

NOP5();

SCL=0;//钳位I2C总线,准备发送数据

}

//主机

voidstop_i2c()

{

SDA=0;

SCL=1;

NOP5();

SDA=1;

NOP5();

}

//从机产生应答

voidack()

{

SDA=0;

SCL=1;

NOP5();

SCL=0;

SDA=1;

}

voidnoack()

{

SDA=1;

SCL=1;

NOP5();

SCL=0;

SDA=0;

}

//主机向24C02中写一字节数据

voidwrite_byte(ucharj)

{

uchari;

SCL=0;

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

{

if(j&0x80)

SDA=1;

else

SDA=0;

_nop_();

SCL=1;//时钟线为高

NOP5();

SCL=0;

j<<=1;

}

ack();

}

//向指定地址写数据

voidwrite_i2c(ucharadd,uchardate)

{

start_i2c();

write_byte(0xa0);//器件地址,写10100000

write_byte(add);//写字地址

write_byte(date);//写数据

stop_i2c();

delayms

(1);//为什么?

}

//从24C04中读取一字节

ucharread_byte()

{

uchari,j;

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

{

SCL=1;

j<<=1;//最低位已经为0

j=j|SDA;

SCL=0;

}

returnj;

}

//主机从24C02当前地址读数据

ucharread_current()

{

uchard;

start_i2c();

write_byte(0xa1);//器件地址,读10100001

d=read_byte();//当前地址读数据

noack();

stop_i2c();

returnd;

}

//从任意地址读数据

ucharread_random(ucharadd)

{

uchara;

start_i2c();

write_byte(0xa0);//器件地址

write_byte(add);//从所写地址读数据

a=read_current();

returna;

}

//串口

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

voidmain()

{

uchari;

SCON=0x50;//串口方式1REN=1;SM0=0;SM1=1;

PCON=0;//SMOD=0

TMOD=0x20;//定时器1定时方式2

EA=1;

ES=1;

TH1=0xe6;//12MHz2400波特率

TL1=0xe6;

TR1=1;//启动定时器

while

(1)

{

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

{

SBUF=table[i];

while(TI==0);

TI=0;

delayms(100);

}

}

}

voides()interrupt4

{

while(RI==0);

RI=0;

P1=SBUF;

}

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchari,temp;

voiddelay(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

voidmain()

{

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

TH1=0xfd;

TL1=0xfd;//波特率为9600,11.0592M

TR1=1;

//SCON=0x50;

SM0=0;

SM1=1;

REN=1;

PCON=0;

while

(1)

{

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

{

SBUF=table[i];//发送数据

while(!

TI);

TI=0;

while(!

RI);

RI=0;

P1=SBUF;//接收数据

delay(100);

}

}

}

#include

#defineucharunsignedchar

#defineSLAVE0x03

#defineBN16

ucharidatatrbuf[16]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};

ucharidatarebuf[16];

bittready;

bitrready;

//

voiddelay(){

unsignedinti;

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

}

//主程序

voidmain(void){

TMOD=0x20;

TL1=0xfd;

TH1=0xfd;

PCON=0x00;

TR1=1;

SCON=0xf0;

ES=1;EA=1;//开串行口中断

while

(1){tready=1;rready=1;}//假设准备好发送和接收

}

//中断程序

voidssio(void)interrupt4using1{

voidstr(void);

voidsre(void);

uchara;

RI=0;

ES=0;//关串行口中断

//****验证地址****

if(SBUF!

=SLAVE){ES=1;gotoreti;}//非本机地址,继续监听

SM2=0;//取消监听状态

SBUF=SLAVE;//从机地址发回

while(TI!

=1);TI=0;

while(RI!

=1);RI=0;

if(RB8==1){SM2=1;ES=1;gotoreti;}//是恢复信号,恢复监听

//****接收命令****

a=SBUF;//接收命令

if(a==0x01){//从机接收主机数据

if(rready==1)SBUF=0x01;//接收准备好接状态

elseSBUF=0x00;

while(TI!

=1);TI=0;

while(RI!

=1);RI=0;

if(RB8==1){SM2=1;ES=1;gotoreti;}

sre();//接收数据块

}

else{

if(a==0x02){//从机向主机发数据

if(tready==1)SBUF=0x02;//发送准备好发状态

elseSBUF=0x00;

while(TI!

=1);TI=0;

while(RI!

=1);RI=0;

if(RB8==1){SM2=1;ES=1;gotoreti;}

str();//发送数据块

}

else{

SBUF=0x80;//命令非法,发状态

while(TI!

=1);TI=0;

SM2=1;ES=1;//恢复监听

}

}

reti:

;//中断结束,返回断点

}

//发送数据程序

voidstr(void){

ucharp,i;

tready=0;

do{

p=0;//清校验和

for(i=1;i

SBUF=trbuf[i];//发送一数据

p+=trbuf[i];

P2=trbuf[i];//从P2口显示

delay();

while(TI!

=1);

TI=0;

}

SBUF=p;//发校验和

while(TI==0);TI=0;

while(RI==0);RI=0;

}while(SBUF!

=0);//主机接收不正确,重新发送

SM2=1;

ES=1;

}

//接收数据块程序

voidsre(void){

ucharp,i;

rready=0;

while

(1){

p=0;//清校验和

for(i=0;i

while(RI!

=1);RI=0;

rebuf[i]=SBUF;//接收一数据

p+=rebuf[i];

}

while(RI!

=1);RI=0;

if(SBUF==p){SBUF=0x00;while(TI==0);TI=0;break;}//校验和正确,发00

else{

SBUF=0xff;//校验和不同,发0ff,重新接收

while(TI==0);TI=0;

}

}

SM2=1;

ES=1;

}

lcd

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]="ILIKEY!

";

ucharcodetable1[]="IAMZGX!

";

sbitRS=P2^0;//数据寄存器

sbitRW=P2^1;//读与写

sbitE=P2^2;//使能端

ucharnum;

voiddelayms(uintz)

{

uintx,y;

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

for(y=z;y>0;y--);

}

voidwrite_com(ucharj)

{

RS=0;

P0=j;

delayms(5);

E=1;

delayms(5);

E=0;

}

voidwrite_data(ucharj)

{

RS=1;

P0=j;

delayms(5);

E=1;

delayms(5);

E=0;

}

voidinit()

{

E=0;

RW=0;

write_com(0x38);//设置16*2显示,7*2点阵,8位数据接口

write_com(0x0e);

write_com(0x06);

write_com(0x01);//清屏

write_com(0x80+0x10);//第一行第一列

}

voidmain()

{

init();

for(num=0;num<12;num++)

{

write_data(table[num]);

delayms(100);

}

//write_com(0x01);//清屏

write_com(0x80+0x50);//重新设置数据指针

for(num=0;num<10;num++)

{

write_data(table1[num]);

delayms(100);//显示的时间

}

for(num=0;num<16;num++)

{

write_com(0x18);

delayms(300);//整屏移动的时间

}

while

(1);

}

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2