- 36
- 0
- 约1.97千字
- 约 6页
- 2016-11-29 发布于重庆
- 举报
基于Proteus虚拟终端51单片机仿真串口发送字符串,数码管显示
先上图:实验程序:/********************************************************************************** 【编写时间】: 2016年6月17日* 【作 者】: 小瓶子* 【实验平台】: Proteus 7* 【外部晶振】: 11.0592mhz* 【主控芯片】: STC89C51* 【编译环境】: Keil μVisio4* 【程序功能】: 在虚拟终端发送8个字符,通过数码管和虚拟* 终端显示出来,8个字符发送完毕,显示发送完毕**********************************************************************************/#includereg51.h#includeintrins.h#define uchar unsigned char#define uint unsigned intuchar 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;m0;m--)for(n=90;n0;n--);}//数码管显示函数void led_display(){uchar i;P2 = 0x01;for(i=0;i8;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; //定时器工作方式2SCON = 0x50; //串行口工作方式2PCON = 0x80; //SMOD = 1,波特率加倍TH1 = 0xfa;TL1 = 0xfa;//波特率设置9600ES = 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; //标志位置1putstring(\r\n);putstring(translate over!\r\n);ES = 1;return;}ES = 1;return; //退出中断}}仿真原理图:
原创力文档

文档评论(0)