单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar bufr[]="------\r\n";//存放接收数据
- uchar *prx=&bufr;//接收指针
- bit str; //接收完毕标志位
- //段码
- uchar code leddata[]={
- 0xC0, //"0"
- 0xF9, //"1"
- 0xA4, //"2"
- 0xB0, //"3"
- 0x99, //"4"
- 0x92, //"5"
- 0x82, //"6"
- 0xF8, //"7"
- 0x80, //"8"
- 0x90, //"9"
- 0x88, //"A"
- 0x83, //"B"
- 0xC6, //"C"
- 0xA1, //"D"
- 0x86, //"E"
- 0x8E, //"F"
- 0x89, //"H"
- 0xC7, //"L"
- 0xC8, //"n"
- 0xC1, //"u"
- 0x8C, //"P"
- 0xA3, //"o"
- 0xBF, //"-"
- 0xFF, //熄灭
- 0xFF //自定义
- };
- //延时函数
- void delay(uint i)
- {
- uint m,n;
- for(m=i;m>0;m--)
- for(n=90;n>0;n--);
- }
- //数码管显示函数
- void led_display()
- {
- uchar i;
- P2=0x01;
- for(i=0;i<6;i++)
- {
- P0=0xff;
- P2=_cror_(P2,1);
- P0=leddata[bufr[i]-'0'];
- delay(2);
- }
- }
- //字符发送函数
- void putchar(uchar data1)
- {
- SBUF=data1; //将待发送的字符送入发送缓冲器
- while(!TI); //等待发送完成
- TI=0; //发送中断标志请0
- }
- //字符串发送函数
- void putstring(uchar *dat)
- {
- while(*dat!='\0') //判断字符串是否发送完毕
- {
- putchar(*dat); //发送单个字符
- dat++; //字符地址加1,指向先下一个字符
- delay(5);
- }
- }
- //串口初始化函数
- void serial_init()
- {
- TMOD=0x20; //定时器工作方式2
- SCON=0x50; //串行口工作方式2
- PCON=0x80; //SMOD =1,波特率加倍
- TH1=0xfa;
- TL1=0xfa; //波特率设置9600
- ES=1;
- EA=1;//开总中断
- }
- void main()
- {
- serial_init();
- TR1=1;
- putstring("Receiving from 8051...\r\n");
- putstring("----------------------\r\n");
- delay(50);
- while(!str);//等待接收完毕
- while(1)
- {
- P0=0xff;
- while(!str);
- led_display();
- }
- }
- void serial() interrupt 4
- {
- if(RI!=1) return;//判断是否接收
- {
- str=0;
- ES=0;
- *prx=SBUF; //接收存放数据
- putchar(*prx);
- RI=0;
- prx++; //指针自加
- if(*prx=='\0') //是否接收完成
- {
- prx=&bufr;//指针初始化
- str=1; //标志位置1
- putstring("\r\n");
- putstring("translate over!\r\n");
- ES=1;
- return;
- }
- ES=1;
- return; //退出中断
- }
- }
复制代码
|