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, 下载次数: 480)
|