仿真带程序 ,811版本
单片机源程序如下:
- #include "stm32f10x.h"
- #include "bsp-lcd1602.h"
- #include "delay.h"
- #include "sys.h"
- #include "adc.h"
- #define SRJK PBout(15)
- #define S PAout(3)
- #define R PAout(2)
- #define SRCLK PCout(9)
- #define SRQ PCout(15)
- #define SRQ_ PCout(14)
- #define J PAout(4)
- #define K PAout(0)
- #define JKCLK PCout(10)
- #define JKQ PCout(13)
- #define JKQ_ PCout(12)
- #define Rd PAout(15)
- #define Vo PAout(14)
- #define TD PAout(13)
- #define Ne555R PCout(0)
- #define Ne555S PCout(1)
- #define Ne555Q_ PCout(2)
- #define Ne555 PBout(10)
- void LED_Init(void);
- void KEY_Init(void);
- unsigned char KEY_Scanf(void);
- void Key_Process(unsigned char key);
- void Adc_Init(void);
- unsigned int Get_Adc(unsigned char ch);
- void SRJK_Process(void);
- void SR_OUT(void);
- void JK_OUT(void);
- void NE555_Process(void);
- char impules = 0;
- char NE555 = 0;
- int main(void)
- {
- delay_init(); //延时函数初始化
- LED_Init();
- KEY_Init();
- Adc_Init();
-
- while(1)
- {
- Key_Process(KEY_Scanf());
- if(impules == 1)
- SRJK_Process();
- else
- {
- SRJK=1;S=1;R=1;SRCLK=1;SRQ=1;SRQ_=1;J=1;K=1;JKCLK=1;JKQ=1;JKQ_=1;
- }
-
- if(NE555)
- NE555_Process();
- else
- {
- Rd=1;Vo=1;TD=1;Ne555R=1;Ne555S=1;Ne555Q_=1;Ne555=1;
- }
- }
- }
- char rd,ne555r,ne555s;
- void NE555_Process(void)
- {
- int a,b;
- float adc1,adc2;
- char code;
- //对数据进行编码
- a=Get_Adc(ADC_Channel_1);
- adc1=(float)a*(3.3/4096);
- b=Get_Adc(ADC_Channel_14);
- adc2=(float)b*(3.3/4096);
- if(adc1>=2.2 && adc2>=1.1)
- {
- code = 1;
- ne555r = 1;
- ne555s = 0;
- }
- else if(adc1<=2.2 && adc2>=1.1)
- {
- ne555r = 0;
- ne555s = 0;
- }
- else if(adc1<=2.2 && adc2<=1.1)
- {
- code = 2;
- ne555r = 0;
- ne555s = 1;
- }
- else if(adc1>=2.2 && adc2<=1.1)
- {
- code = 2;
- ne555r = 1;
- ne555s = 1;
- }
-
- if(rd==0)
- code = 1;
- //输出
- switch(code)
- {
- case 1:Vo=1;Ne555Q_=0;TD=0;break;
- case 2:Vo=0;Ne555Q_=1;TD=1;break;
- default:break;
- }
- if(ne555r)
- Ne555R = 0;
- else
- Ne555R = 1;
- if(ne555s)
- Ne555S = 0;
- else
- Ne555S = 1;
- }
- char s,r,srclk=1,srq,srq_;
- char j,k,jkclk=1,jkq,jkq_;
- void SRJK_Process(void)
- {
- SRCLK=0;
- if(srclk==0)
- {
- srclk = 1;
- SR_OUT();
- }
-
- JKCLK=0;
- if(jkclk==0)
- {
- jkclk = 1;
- JK_OUT();
- }
- }
- char SRSTATE1=0,SRSTATE2=0,SRSTATE3=0,SRSTATE4=0;
- void SR_OUT(void)
- {
- if(s==0&&r==0&&SRSTATE1==0)
- {
- SRQ=1;SRQ_=1;
- SRSTATE1 = 1;
- }
- else if(s==0&&r==0&&SRSTATE1==1)
- {
- SRQ=0;SRQ_=0;
- SRSTATE1 = 0;
- }
-
- if(s==1&&r==0&&SRSTATE2==0)
- {
- SRQ=1;SRQ_=0;
- SRSTATE2 = 1;
- }
- else if(s==1&&r==0&&SRSTATE2==1)
- {
- SRQ=0;SRQ_=0;
- SRSTATE2 = 0;
- }
-
- if(s==0&&r==1&&SRSTATE3==0)
- {
- SRQ=1;SRQ_=1;
- SRSTATE3 = 1;
- }
- else if(s==0&&r==1&&SRSTATE3==1)
- {
- SRQ=0;SRQ_=1;
- SRSTATE3 = 0;
- }
-
- if(s==1&&r==1&&SRSTATE4==0)
- {
- SRQ=1;SRQ_=0;
- SRSTATE4 = 1;
- }
- else if(s==1&&r==1&&SRSTATE4==1)
- {
- SRQ=0;SRQ_=0;
- SRSTATE4 = 0;
- }
- }
- char JKSTATE1=0,JKSTATE2=0,JKSTATE3=0,JKSTATE4=0;
- void JK_OUT(void)
- {
- if(j==0&&k==0&&JKSTATE1==0)
- {
- JKQ=1;JKQ_=1;
- JKSTATE1 = 1;
- }
- else if(j==0&&k==0&&JKSTATE1==1)
- {
- JKQ=0;JKQ_=0;
- JKSTATE1 = 0;
- }
-
- if(j==1&&k==0&&JKSTATE2==0)
- {
- JKQ=1;JKQ_=0;
- JKSTATE2 = 1;
- }
- else if(j==1&&k==0&&JKSTATE2==1)
- {
- JKQ=0;JKQ_=0;
- JKSTATE2 = 0;
- }
-
- if(j==0&&k==1&&JKSTATE3==0)
- {
- JKQ=1;JKQ_=1;
- JKSTATE3 = 1;
- }
- else if(j==0&&k==1&&JKSTATE3==1)
- {
- JKQ=0;JKQ_=1;
- JKSTATE3 = 0;
- }
-
- if(j==1&&k==1&&JKSTATE4==0)
- {
- JKQ=1;JKQ_=0;
- JKSTATE4 = 1;
- }
- else if(j==1&&k==1&&JKSTATE4==1)
- {
- JKQ=0;JKQ_=1;
- JKSTATE4 = 0;
- }
- }
- void Key_Process(unsigned char key)
- {
- switch(key)
- {
- case 1://S
- if(s)
- {
- s = 0;
- S = 1;
- }
- else
- {
- s = 1;
- S = 0;
- }
- break;
- case 2://R
- if(r)
- {
- r = 0;
- R = 1;
- }
- else
- {
- r = 1;
- R = 0;
- }
- break;
- case 3://CLK
- if(srclk)
- {
- srclk = 0;
- SRCLK = 1;
- delay_ms(500);
- }
- else
- {
- srclk = 1;
- SRCLK = 0;
- }
- break;
- case 4://J
- if(j)
- {
- j = 0;
- J = 1;
- }
- else
- {
- j = 1;
- J = 0;
- }
- break;
- case 5://K
- if(k)
- {
- k = 0;
- K = 1;
- }
- else
- {
- k = 1;
- K = 0;
- }
- break;
- case 6://CLK
- if(jkclk)
- {
- jkclk = 0;
- JKCLK = 1;
- delay_ms(500);
- }
- else
- {
- jkclk = 1;
- JKCLK = 0;
- }
- break;
- case 7://触发
- if(impules)
- {
- impules = 0;
- SRJK = 1;
- }
- else
- {
- impules = 1;
- SRJK = 0;
- NE555 = 0;
- Ne555 = 1;
- }
- break;
- case 8://复位
- SRJK=0;S=1;R=1;SRCLK=0;SRQ=1;SRQ_=1;J=1;K=1;JKCLK=0;JKQ=1;JKQ_=1;
- s=0,r=0,srclk=1,srq=0,srq_=0;
- j=0,k=0,jkclk=1,jkq=0,jkq_=0;
- JKSTATE1=0,JKSTATE2=0,JKSTATE3=0,JKSTATE4=0;
- SRSTATE1=0,SRSTATE2=0,SRSTATE3=0,SRSTATE4=0;
- break;
- case 9://RD
- if(rd)
- {
- rd = 0;
- Rd = 1;
- }
- else
- {
- rd = 1;
- Rd = 0;
- }
- break;
- case 10://NE555
- if(NE555)
- {
- NE555 = 0;
- Ne555 = 1;
- }
- else
- {
- NE555 = 1;
- Ne555 = 0;
- impules = 0;
- SRJK = 1;
- }
- break;
- case 11://复位
- rd = 0;Rd=1;
- break;
- default:break;
- }
- }
- unsigned char KEY_Scanf(void)
- {
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0);
- return 1;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);
- return 2;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)==0);
- return 3;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0);
- return 4;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0);
- return 5;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0);
- return 6;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0);
- return 7;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==0);
- return 8;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0);
- return 9;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0);
- return 10;
- }
- }
- else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
- {
- delay_ms(10);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0);
- return 11;
- }
- }
- return 0;
- }
- void KEY_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_4|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_4|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
-
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
-
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_SetBits(GPIOB,GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_10);
- }
- void Adc_Init(void)
- {
- ADC_InitTypeDef ADC_InitStructure;//ADC?????//?????????????????????????,????,?????ADC1_GPIO_Config();??
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1, ENABLE); //??ADC1,GPIOC??
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
- //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//?????????????
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //????
- GPIO_Init(GPIOA, &GPIO_InitStructure); //???PC4
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //
- //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//?????????????
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //????
- GPIO_Init(GPIOC, &GPIO_InitStructure); //???PC4
-
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1?ADC2???????
- ADC_InitStructure.ADC_ScanConvMode = DISABLE; //????
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC?????????
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//???????,???????
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//???????
- ADC_InitStructure.ADC_NbrOfChannel = 2;//?????1
- ADC_Init(ADC1, &ADC_InitStructure); //???ADC
-
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 2, ADC_SampleTime_55Cycles5);
- //ADC1????14,????1,????55.5???
- // ADC_DMACmd(ADC1, ENABLE);//??ADC1??DMA
- ADC_Cmd(ADC1, ENABLE);//??ADC1
- ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- }
- //获得ADC值
- //ch:通道值 0~3
- unsigned int Get_Adc(unsigned char ch)
- {
- //设置指定ADC的规则组通道,一个序列,采样时间
- ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期
-
- ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
-
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
- return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
- }
复制代码 本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,不胜感激.切勿照搬,文件下载:
Keil代码与Proteus仿真下载:
NE555and触发器仿真.7z
(388.45 KB, 下载次数: 10)
|