赞
踩
13. PDIP封装
- #include <reg52.h>
- //串口assic控制led灯
- void delay02s(void) //延时1ms子程序
- {
- unsigned char i,j,k;
- for(i=18;i>0;i--) //20 //18 2.5K
- for(j=1;j>0;j--) //10 //20
- for(k=1;k>0;k--); //248
- }
-
- void delay200ms(void) //延时200ms子程序
- {
- unsigned char i,j,k;
- for(i=20;i>0;i--)
- for(j=20;j>0;j--) //10 //20
- for(k=248;k>0;k--); //248
- }
-
- sbit led0=P2^0;
- sbit led1=P2^1;
- sbit led2=P2^2;
- sbit led3=P2^3;
- sbit led4=P2^4;
- sbit led5=P2^5;
-
- sbit led6=P2^6;
- sbit led7=P2^7;
-
- void start_led(char n)
- {
- led0 = n&0x01; n=n>>1;
- led1 = n&0x01; n=n>>1;
- led2 = n&0x01; n=n>>1;
- led3 = n&0x01; n=n>>1;
- led4 = n&0x01; n=n>>1;
- led5 = n&0x01; n=n>>1;
- }
- unsigned char flag;
- void main(void)
- {
- int i=30;
-
- //设置参数
- TMOD = 0x20; //设定定时器1的工作方式为方式2
- TH1 = 0xfd;
- TL1 = 0xfd; //装载TH1、TL1
- TR1 = 1; //启动定时器1
-
-
- SM0 = 0;
- SM1 = 1; //设定串口工作方式为方式1
- REN = 1; //允许串行接收位
-
- EA = 1; //全局中断允许位
- ES = 1; //串口中断允许位
-
- // start_led(0);
- // delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
- // start_led(0xff);
-
- while(1)
- {
- /* 刚开始单片机缓冲寄存器为空,无数据可以显示
- * 先从串口接收数据,再返回该数据
- * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据
- * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值
- */
- led6 = ~led6;
- led7 = ~led7;
-
- delay200ms();
-
- if(flag == 1)
- {
- start_led(P1);
- //发送数据
- ES = 0; //关闭串口中断,发送数据
- SBUF = P1; //数据写入SBUF寄存器
- while(!TI); //等待
- TI = 0;
- ES = 1;
- flag = 0;
-
- }
- }
-
- }
-
- void ser() interrupt 4
- {
- //接收数据
- P1 = SBUF;
- flag = 1;
- RI = 0;
- }
- #include <reg52.h>//CPCI系统控制电源程序
-
- void delay02s(void) //延时1ms子程序
- {
- unsigned char i,j,k;
- for(i=18;i>0;i--) //20 //18 2.5K
- for(j=1;j>0;j--) //10 //20
- for(k=1;k>0;k--); //248
- }
-
- void delay200ms(void) //延时200ms子程序
- {
- unsigned char i,j,k;
- for(i=20;i>0;i--)
- for(j=20;j>0;j--) //10 //20
- for(k=248;k>0;k--); //248
- }
-
-
- void delay_ms()
- {
- int i,j;
- for(j=110;j>0;j--);
- }
- sbit led0=P2^0;
- sbit led1=P2^1;
- sbit led2=P2^2;
- sbit led3=P2^3;
- sbit led4=P2^4;
- sbit led5=P2^5;
-
- sbit ps_switch = P3^2;
- sbit pci_rst = P2^6;
- sbit ps_on = P2^7;
-
- void start_led(char n)
- {
- led0 = n&0x01; n=n>>1;
- led1 = n&0x01; n=n>>1;
- led2 = n&0x01; n=n>>1;
- led3 = n&0x01; n=n>>1;
- led4 = n&0x01; n=n>>1;
- led5 = n&0x01; n=n>>1;
- }
- unsigned char flag_switchon=0;
- unsigned char flag_switchFF=0;
- unsigned char flag_switchOSoff=0;
- unsigned char flag_switchOSen=0;
- unsigned char int_cnt=0;
-
- unsigned char flag;
-
- void checkOSoff()
- {
- unsigned int i=0,k=0;
- flag_switchOSoff=0;
-
- while(1)
- {
-
- if(pci_rst==0)
- {
- k++;
- }
- else
- {
- break;
- }
-
- if(k>3000)
- {
- flag_switchOSoff=1;
- break;
- }
- delay_ms();
- }
- }
-
-
- void checkOSen()
- {
- unsigned int i=0,k=0;
-
- if(flag_switchOSen==1)return ;
-
- while(1)
- {
-
- if(pci_rst==1)
- {
- k++;
- }
- else
- {
- break;
- }
-
- if(k>3000)
- {
- flag_switchOSen=1;
- break;
- }
- delay_ms();
- }
- }
-
- void checkSwitch()
- {
- unsigned int i=0,k=0;
- while(1)
- {
-
- if(ps_switch==0)
- {
- k++;
- }
- else
- {
- break;
- }
-
- if(k>3000)
- {
- break;
- }
- delay_ms();
-
- }
-
- if(k>3000)
- flag_switchFF = 1;
- else
- flag_switchFF = 0;
- //
- if(k>3)
- flag_switchon = 1;
- else
- flag_switchon = 0;
-
- }
-
- void send(int t)
- {
- ES = 0; //关闭串口中断,发送数据
- SBUF = t+0x30; //P1//数据写入SBUF寄存器
- while(!TI); //等待
- TI = 0;
- ES = 1;
- }
- int status=0;
- void main(void)
- {
- int i=0;
-
- //设置参数
- TMOD = 0x20; //设定定时器1的工作方式为方式2
- TH1 = 0xfd;
- TL1 = 0xfd; //装载TH1、TL1
- TR1 = 1; //启动定时器1
-
-
- SM0 = 0;
- SM1 = 1; //设定串口工作方式为方式1
- REN = 1; //允许串行接收位
-
- ES = 1; //串口中断允许位
-
- EA = 1; //全局中断允许位
- // EX0 = 1; //开外部中断0
- // IT0=1; //中断触发为跳沿触发
- // start_led(0);
- // delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
- // start_led(0xff);
- while(1)
- {
- /* 刚开始单片机缓冲寄存器为空,无数据可以显示
- * 先从串口接收数据,再返回该数据
- * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据
- * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值
- */
-
- checkSwitch(); //开机检测
-
- if(flag_switchFF == 1)//3秒关机
- {
- i++;
- flag_switchFF=0;
- flag_switchon = 0;
-
- delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
- delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
-
- flag_switchOSen = 0;
- send(0);
- }
- if(flag_switchon == 1)//开机
- {
- i++;
- flag_switchon=0;
- ps_on = 0;
- flag_switchOSoff = 0;
- flag_switchOSen = 0;
- send(1);
- }
-
- checkOSen();
- if(flag_switchOSen==1) //系统运行中。。。
- {
- checkOSoff();
- send(2);
- }
- if(flag_switchOSoff==1)//操作系统已经关闭
- {
- ps_on = 1;
- flag_switchon = 0;
- flag_switchFF=0;
- flag_switchOSen = 0;
- send(3);
- }
- if(flag == 1)//发送232数据
- {
- // start_led(P1);
- //发送数据
- ES = 0; //关闭串口中断,发送数据
- SBUF = P1; //P1//数据写入SBUF寄存器
- while(!TI); //等待
- TI = 0;
- ES = 1;
- flag = 0;
- }
- }
-
- }
-
- void ser() interrupt 4
- {
- //接收数据
- P1 = SBUF;
- flag = 1;
- RI = 0;
- }
-
- void INT0_ISR(void) interrupt 0
- {
-
- EX0=0;
-
- start_led(int_cnt++%10);
-
- P1 = int_cnt%10+0x30;
- // delay200ms();
- flag = 1;
-
-
- // ET0=1;
- // TR0=1;
- EA=1;
- EX0=1;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。