C#上位機源碼
上位機程序與源碼
單片機下位機源程序如下:
- #include<reg51.h>
- #include<intrins.h> //因為要用到左右移函數,所以加入這個頭文件
- #define GPIO_DIG P0
- #define GPIO_LED P0 //將P2口另外取名為GPIO_LED
- #define GPIO_PLACE P2 //1111-1101
- bit cmdArrived = 0; //命令到達標志,即接收到上位機下發的命令
- unsigned char cmdIndex;
- unsigned char n;
- unsigned int i;
- unsigned char code DIG_PLACE[8]={
- 0xfd,0xbf,0xfd,0xf7,0xef,0x7f,0xfd,0xfb};//學號16130712
- unsigned char code DIG_CODE[3]={
- 0x6d,0x5b,0x3f};
- //520的顯示
- unsigned char DisplayData[8];//用來存放要顯示的8位數的值
- sbit Beep = P1^5 ;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit RELAY = P1^4; //定義繼電器使用的IO口
- sbit K1 = P0^0; //定義按鍵使用的IO口
- //520子程序
- void Delay10ms(unsigned int c) //誤差 0us
- {unsigned char a, b;
- for (;c>0;c--)
- {
- for (b=38;b>0;b--)
- {
- for (a=130;a>0;a--);
- }
- }
- }
- void smg()
- {
- unsigned char i = 0;
- while(1)
- {
- GPIO_DIG = ~DIG_CODE[i];
- i++;
- if(i == 3)
- {
- i = 0;
- }
- Delay10ms(50);
- }
- }
- //0-7
- void DigDisplay()
- {
- unsigned char i;
- unsigned int j;
- for(i=0;i<8;i++)
- {switch(i) //位選,選擇點亮的數碼管,
- {
- case(0):
- LSA=0;LSB=0;LSC=0; break;//顯示第0位
- case(1):
- LSA=1;LSB=0;LSC=0; break;//顯示第1位
- case(2):
- LSA=0;LSB=1;LSC=0; break;//顯示第2位
- case(3):
- LSA=1;LSB=1;LSC=0; break;//顯示第3位
- case(4):
- LSA=0;LSB=0;LSC=1; break;//顯示第4位
- case(5):
- LSA=1;LSB=0;LSC=1; break;//顯示第5位
- case(6):
- LSA=0;LSB=1;LSC=1; break;//顯示第6位
- case(7):
- LSA=1;LSB=1;LSC=1; break;//顯示第7位
- }
- GPIO_DIG=DisplayData[i];//發送段碼
- j=10; //掃描間隔時間設定
- while(j--);
- GPIO_DIG=0x00;//消隱
- }
- }
- void dsmg()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DisplayData[i]=DIG_CODE[i];
- }
- while(1)
- {
- DigDisplay();
- }
- }
- //SHANSHUO
- void shanshuo(void)
- {
- unsigned char LED;
- LED = 0xFE;
- while(1)
- {
- P0 = LED;
- Delay10ms(50);
- LED = _crol_(LED,1);
- }
- }
- //
- void jidianqi()
- {
- while(1)
- {
- if(K1 == 0) //如果按鍵按下
- {
- RELAY = 0; //繼電器閉合
- }
- else
- {
- RELAY = 1;
- }
- }
- }
- void UsartConfiguration()
- {
- SCON=0X50; //設置為工作方式1
- TMOD=0X20; //設置計數器工作方式2
- PCON=0X80; //波特率加倍
- TH1=0XF3; //計數器初始值設置,注意波特率是4800的
- TL1=0XF3;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- }
- void Usart() interrupt 4
- {
-
- if (RI) //接收到字節
- {
- cmdIndex = SBUF;
- RI = 0; //清零接收中斷標志位
- SBUF = cmdIndex;//將接收到的數據放入到發送寄存器
- cmdArrived = 1;
- }
- if (TI) //字節發送完
- { TI = 0; //清零發送中斷標志位
- }
- //清除發送完成標志位
- }
- void main()
- {
- UsartConfiguration();
- while(1)
- {
- if(cmdArrived) //進入中斷,接受完數據且使得cmdIndex = SBUF后才執行,假如SBUF=0x01
- {
- cmdArrived = 0;
- if(cmdIndex==0x33)
- {
- GPIO_LED=0x01;//0000 0010
- while(1)
- {
- for(n=0;n<7;n++) //左移7次,這樣子就會到達最左邊
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
所有作業.rar
(4.15 MB, 下載次數: 481)
2017-12-27 15:35 上傳
點擊文件名下載附件
51單片機下位機各種程序
|