基于8155的8LED显示串口通信机设计 编程.docx
- 文档编号:18602503
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:18
- 大小:16.08KB
基于8155的8LED显示串口通信机设计 编程.docx
《基于8155的8LED显示串口通信机设计 编程.docx》由会员分享,可在线阅读,更多相关《基于8155的8LED显示串口通信机设计 编程.docx(18页珍藏版)》请在冰点文库上搜索。
基于8155的8LED显示串口通信机设计编程
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definepaXBYTE[0x0001]//定义8155口地址
#definepbXBYTE[0x0002]
#definecontrol8155XBYTE[0x0000]
sbitSCK=P1^0;
sbitSDA=P1^1;
sbitE=P3^7;
sbitSEND=P3^1;
sbitREV=P3^0;
sbitK1=P3^2;
sbitK2=P3^3;
sbitK3=P2^3;
//ucharcodepos[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数字0-9
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0123456789存码表
ucharpos[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选,选中数码管
ucharsend[8];
uchartemp;
inti;
voiddelay(unsignedintt)
{
unsignedinti,j;
for(i=0;i for(j=0;j<10;j++) ; } voiddelayXus(ucharx)//微秒延时 { while(--x); } voiddelayXms(ucharx)//毫秒延时 { uchari; while(x--) { for(i=250;i>0;i--) { ; } } } voidstart() { SDA=1; delay(3); SCK=1; delay(3); SDA=0; delay(3); SCK=0; delay(3); } voidstop() { SDA=0; delay(3); SCK=1; delay(3); SDA=1; delay(3); } voidU4_init() { SCK=1; delay(3); SDA=1; delay(3); } voidresponds() { uchari; i=0; SCK=1; SDA=1; delay(3); while(SDA==1&&i<250) i++; SCK=0; delay(3); } voidwrite_dat(uchardat)//写一个字节 { uchari,temp; temp=dat; for(i=0;i<8;i++) { temp=temp<<1; SDA=CY; delay(3); SCK=1; delay(50); SCK=0; } } voidwrite(ucharadd,uchardat)//写一个字节dat到地址add { start(); write_dat(0xa0); responds(); write_dat(add); responds(); write_dat(dat); responds(); stop(); } ucharread_dat()//读一个字节 { uchara,r,temp; SDA=1;//接收前记得释放数据线,即拉高sda。 delay(3); for(a=0;a<8;a++)//循环八次以此接收一字节数据 { SCK=1;//sck置高,使接收数据稳定。 delay(3); r=r<<1;//接收数据处理,存入i2c_r变量中。 temp=SDA; r=r|temp; SCK=0;//sck置低,准备接受下个数据位。 delay(3); } returnr; } ucharread(ucharadd)//从地址add中读取一个字节 { uchardat; start(); write_dat(0xa0); responds(); write_dat(add); responds(); start(); write_dat(0xa1); responds(); dat=read_dat(); delayXus (2); stop(); returndat;} voidwritedata() {uchari; ucharstr[8]={0xf9,0xa4,0xb0,0xc0,0xf9,0xa4,0xb0,0xc0}; for(i=0;i<8;i++) { write(i,str[i]); } str[0]=0xa4;str[1]=0xb0;str[2]=0x99;str[3]=0xf9;str[4]=0xa4;str[5]=0xb0;str[6]=0x99;str[7]=0xf9; for(i=8;i<16;i++) { write(i,str[i-8]); } str[0]=0xb0;str[1]=0x99;str[2]=0x92;str[3]=0xa4;str[4]=0xb0;str[5]=0x99;str[6]=0x92;str[7]=0xa4; for(i=16;i<24;i++) { write(i,str[i-16]); } str[0]=0x99;str[1]=0x92;str[2]=0x82;str[3]=0xb0;str[4]=0x99;str[5]=0x92;str[6]=0x82;str[7]=0xb0; for(i=24;i<32;i++) { write(i,str[i-24]); } str[0]=0x92;str[1]=0x82;str[2]=0xf8;str[3]=0x99;str[4]=0x92;str[5]=0x82;str[6]=0xf8;str[7]=0x99; for(i=32;i<40;i++) { write(i,str[i-32]); } str[0]=0x82;str[1]=0xf8;str[2]=0x80;str[3]=0x92;str[4]=0x82;str[5]=0xf8;str[6]=0x80;str[7]=0x92; for(i=40;i<48;i++) { write(i,str[i-40]); } str[0]=0xf8;str[1]=0x80;str[2]=0x90;str[3]=0x82;str[4]=0xf8;str[5]=0x80;str[6]=0x90;str[7]=0x82; for(i=48;i<56;i++) { write(i,str[i-48]); } str[0]=0x80;str[1]=0x90;str[2]=0xc0;str[3]=0xf8;str[4]=0x80;str[5]=0x90;str[6]=0xc0;str[7]=0xf8; for(i=56;i<64;i++) { write(i,str[i-56]); } str[0]=0x90;str[1]=0xc0;str[2]=0x88;str[3]=0x80;str[4]=0x90;str[5]=0xc0;str[6]=0x88;str[7]=0x80; for(i=64;i<72;i++) { write(i,str[i-64]); } str[0]=0xc0;str[1]=0x88;str[2]=0x83;str[3]=0x90;str[4]=0xc0;str[5]=0x88;str[6]=0x83;str[7]=0x90; for(i=72;i<80;i++) { write(i,str[i-72]); } } voidsend_char(uchartemp1) {SBUF=temp1; while(! TI); TI=0; } voidMAX232_init() { TMOD=0x20; TH1=252; TL1=252; TR1=1; PCON=0x80; SCON=0x50; } voidmain() { inti,j,set; charb,t; ucharword[16],recv[8]; U4_init(); writedata(); delay(50); set=0; while (1) { control8155=0x03; for(i=0;i<8;i++) { pa=pos[i]; pb=0x88; pb=send[i]; delay(5); } } while (1) { while(K2) { while(! K1) { if(! K2) break; } while(K1) { if(! K2) break; } if(! K2) break; delay(30); set++; if(set>10) { set=0; } } MAX232_init(); while(! K2); control8155=0x03; delay(30); switch(set) { case1: for(i=0;i<8;i++) { send[i]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } while(K3)//show { for(i=0;i<8;i++) { pa=pos[i]; pb=send[i]; delay(5); } delay(5); } delay(5); while(! K3); pa=0x00; pb=0xff; break; break; case2: for(i=8;i<16;i++) { send[i-8]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case3: for(i=16;i<24;i++) { send[i-16]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case4: for(i=24;i<32;i++) { send[i-24]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case5: for(i=32;i<40;i++) { send[i-32]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case6: for(i=40;i<48;i++) { send[i-40]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case7: for(i=48;i<56;i++) { send[i-48]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case8: for(i=56;i<64;i++) { send[i-56]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case9: for(i=64;i<72;i++) { send[i-64]=read(i); } for(i=0;i<16;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; case10: for(i=72;i<80;i++) { send[i-72]=read(i); } for(i=0;i<8;i++) { send_char(send[i]); delay(50); if(RI==1) {RI=0; temp=SBUF; recv[i]=temp; } delay(100); } break; } delay(2000); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于8155的8LED显示串口通信机设计 编程 基于 8155 LED 显示 串口 通信 设计