|
電腦發送大寫A下位機顯示流水燈。電腦發送大寫字母B下位機數碼管顯示0-F.- /*******************************************************
- 功能 :串口程序。電腦發送字母,下位機(實驗板)
- 顯示流水燈和數碼管顯示0-F
- 單片機:STC12C5A60S2
- 晶振 :11.0592M(必須用這個頻率的晶振要不會出錯)
- 作者 :蘇義江
- 時間 ; 20015-12-12
- 注釋 :數碼管用P2口通過鎖存器573驅動位和段。
- 位的鎖存端用P0^6控制
- 段的鎖存端用P0^7控制
- *******************************************************/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit wei=P0^6;//位使能
- sbit duan=P0^7;//段使能
- //共陽數碼管段碼
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
- 0xa1,0x86,0x8e,0x89};
- //位碼
- uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar a,i;
- void init_uart()//串口初始化
- {
- TMOD=0X20;//T1工作在方式2及自動重裝
- TH1=0XFD;//波特率9600
- TL1=0XFD;
- TR1=1;
- // SCON=0X50; //SCON=0X50也可以寫成SM0=0;SM1=1;
- SM0=0;
- SM1=1;
- REN=1;
- ES=1; //啟動串口中斷
- EA=1;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=700;y>0;y--);
- }
- void liushui()//流水燈
- {
- for(i=0;i<8;i++)
- {
- P0=tab[i];
- delay(200);
- }
- }
- void diplay()//數碼管顯示0-F
- {
- wei=1; //打開573位碼鎖存端
- P2=0;
- wei=0; //鎖存數據
- for(i=0;i<16;i++)
- {
- duan=1; //打開573段碼鎖存端
- P2=table[i];
- duan=0; //鎖存數據
- delay(1000);
- P2=0XFF; //消隱
- }
- }
- void main()
- {
- init_uart();
- while(1);
-
- }
- void uate() interrupt 4
- {
- ES=0; //先關閉串口中斷防止出錯
- RI=0; //發送標志位清零
- a=SBUF;
- switch(a)
- {
- case 'A': liushui();break;//電腦發送A實驗板顯示流水燈
- case 'a': P0=0; break;//電腦發送a實驗板顯示LED燈全亮
- case 'B': diplay();break;//電腦發送B實驗板數碼管顯示0-F
- }
- ES=1;//啟動串口中斷,繼續發送
- }
復制代碼
|
|