我用PROTEUS模擬了郭天祥師傅書上的串口打印應用實例,涉及串口通訊,數碼管實時顯示。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei圖片20200305115348.png (107.18 KB, 下載次數: 51)
下載附件
2020-3-5 11:56 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #include<stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit adwr=P3^6;
- sbit adrd=P3^7;
- sbit CSAD=P2^5;
- uchar flag, a;
- uchar flag_uart, flag_time, flag_on, a, i, t0_num, ad_val;
- float ad_vo;
- uchar code table[]={0x3f, 0x06, 0x5b, 0x4f,
- 0x66, 0x6d, 0x7d, 0x07,
- 0x7f, 0x6f, 0x77, 0x7c,
- 0x39, 0x5e, 0x79, 0x71};
- void delayms(uint xms)
- {
- uint i, j;
- for(i=xms; i>0; i--)
- for(j=110; j>0; j--);
- }
- void init()
- {
- TMOD=0x21;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- ET0=1;
- SM0=0;
- SM1=1;
- REN=1;
- EA=1;
- ES=1;
- CSAD=0;
- }
- void display(uchar value)
- {
- uchar bai, shi, ge;
- bai=value/100;
- shi=value%100/10;
- ge=value%10;
-
- dula=1;
- P0=table[bai];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0x7e;
- wela=0;
- delayms(5);
- P0=0xff;
- wela=1;
- wela=0;
- dula=1;
- P0=table[shi];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0x7d;
- wela=0;
- delayms(5);
- P0=0xff;
- wela=1;
- wela=0;
- dula=1;
- P0=table[ge];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0x7b;
- wela=0;
- delayms(5);
- P0=0xff;
- wela=1;
- wela=0;
- }
- uchar get_ad()
- {
- uchar adval;
- adwr=1;
- _nop_();
- adwr=0;
- _nop_();
- adwr=1;
- P1=0xff;
- adrd=1;
- _nop_();
- adrd=0;
- _nop_();
- adval=P1;
- adrd=1;
- return adval;
- }
- void main()
- {
- init();
- wela=1;
- P0=0x7f;
- wela=0;
- while(1)
- {
- if(flag_uart==1)
- {
- flag_uart=0;
- ES=0;
- TI=1;
- switch(flag_on)
- {
- case 0: puts("Turn on ad!\n");
- TR0=1;
- break;
- case 1: printf("Turn off ad!\n");
- TR0=0;
- break;
- case 2: puts("Error!\n");
- break;
- }
- while(!TI);
- TI=0;
- ES=1;
- }
- if(flag_time==1)
- {
- flag_time=0;
- ad_val=get_ad();
- ad_vo=(float)ad_val*5.0/256.0;
- ES=0;
- TI=1;
- printf("The voltage is %fv\n", ad_vo);
- while(!TI);
- TI=0;
- ES=1;
- }
- display(ad_val);
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建文件夾.rar
(204.63 KB, 下載次數: 35)
2020-3-5 11:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|