#include <stm32f10x.h> u8 smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; u32 Tick_Tenms=0,Tick_Sec=0; u8 dispbuf[8]; void SysTick_Handler(void){ static u32 index=0; GPIOB->ODR = (GPIOB->ODR&0x0ff)|(smgduan[index]<<8); GPIOB->ODR = (GPIOB->ODR&0x0ffe3)|(index<<2); index++; index&=0x07; Tick_Tenms++; if((Tick_Tenms%100)==0) Tick_Sec++; } void InitGPIO(){ RCC->APB2ENR|= (1<<3) + (1<<2); GPIOB->CRH = 0x33333333; GPIOB->CRL = (GPIOB->CRL&0xfff000ff)|0x33300; RCC->APB2ENR |= 0x01; AFIO->MAPR |= 0x02000000; } void Init_NVIC(void) { u32 * pReg; u8 *pbReg; pReg=(u32*)0xE000E014; pReg[0]=7200000; pReg=(u32*)0xE000E010; pReg[0]=0x07; pbReg=(u8*)0xE000ED23; pbReg[0]=0xff; } int main(){ extern u32 Tick_Tenms,Tick_Sec; u32 i; Init_NVIC(); InitGPIO(); for(i=0;i<8;i++) if(i==0) dispbuf[i]=2; else if(i==1) dispbuf[i]=1; else if(i==2) dispbuf[i]=0; else if(i==3) dispbuf[i]=1; else if(i==4) dispbuf[i]=1; else if(i==5) dispbuf[i]=7; else if(i==6) dispbuf[i]=2; else dispbuf[i]=9; while(1); }
时间: 2024-04-26 12:21:47 浏览: 108
这段代码是一个控制数码管显示的程序,使用了STM32F10x单片机,其中包含了SysTick定时器中断和GPIO口控制数码管显示。在main函数中,给dispbuf数组赋值,然后通过GPIO口控制数码管的显示。在SysTick_Handler中,通过循环控制index变量在0到7之间循环,然后通过GPIO口控制数码管的显示。Tick_Tenms和Tick_Sec变量分别记录了经过的毫秒数和秒数。InitGPIO函数初始化了GPIO口的设置,Init_NVIC函数初始化了NVIC中断控制器的设置。需要注意的是,这段代码中只给了dispbuf数组的前8个元素赋值,后面的元素没有赋值。
相关问题
#include "stm32f10x.h" #include "usart.h" #include "key.h" u8 QD = 0; uint8_t ZF = 0; uint8_t SD = 50; uint16_t LED = 0x0001; #define IN1 PAout(0) #define IN2 PAout(1) #define SH_CP PBout(0) #define DS PBout(1) #define ST_CP PBout(2)解释程序
这是一个基于STM32F10x芯片的程序,其中包括了一些头文件和定义了一些变量。
其中,"usart.h"和"key.h"是自定义的头文件,可能包含了一些用于串口通信和按键检测的函数。
变量QD、ZF和SD分别代表旋转方向、步进角度和步进速度。
LED变量表示二进制数码管的输出状态,初始值为0x0001。
宏定义中,IN1和IN2分别对应PA0和PA1引脚,用于控制步进电机的方向;SH_CP、DS和ST_CP分别对应PB0、PB1和PB2引脚,用于控制74HC595移位寄存器输出的数据。
/*十六进制异或运算出原密码*/ /*/#include <string.h> #include<iostream> using namespace std; int main() { char result[] = {0x66, 0x6D, 0x63, 0x64, 0x7F, 0x5C, 0x49, 0x52, 0x57,0x4F, 0x43, 0x45 ,0x48, 0x52, 0x47, 0x5B, 0x4F, 0x59, 0x53, 0x5B, 0x55,0x68,'\0'}; for(int i = 0;i < strlen(result) ;i++) result[i]= result[i]^i; cout << result << endl; return 0 ; }*/ //密码加解密,源码:CocaColacosohthreeyuan$ /*#include <string.h> #include <stdio.h> #include<iostream> using namespace std; int main() { char result[] = {"Cnnb$lu'|axni-j`|}sag17"}; for (int i = 0; i < strlen(result); i++) result[i] = result[i] ^ i; cout << result << endl; return 0; }*/ //密码是否正确CocaColacosohthreeyuan$ EE.exe /*#include <string.h> #include <stdio.h> #include <stdlib.h> #include<iostream> using namespace std; int main() { char temp[] = {0}; int i = 0; static const char* image = (char*)"CnabGjjfkfyddyf}utkfu{2"; std::cout << "Please input a password: "; std::cin >> temp; //scanf("%s", temp); for (i = 0;i < strlen(temp);++i) { temp[i] ^= i;} if (!strcmp(temp,image)) std::cout << "you are right!\n" << std::endl; else std::cout << "you are wrong!\n" << std::endl; system("pause"); return 0; } */
这是三段 C++ 代码,分别实现了密码加解密和密码验证功能。
第一段代码使用了十六进制异或运算得出原密码。其中,char 数组 result 存储了加密后的密码,for 循环中的异或运算逆推出了原密码,最后输出原密码。注意,这里使用了 i < strlen(result) 作为循环条件,strlen 函数计算的是字符串的长度,因此需要保证 result 是以 '\0' 结尾的字符串。
第二段代码实现了密码加解密功能。同样是使用了异或运算,将每个字符与其下标进行异或运算,得到加密后的密码。解密同理。
第三段代码实现了密码验证功能。首先要求用户输入密码,然后进行加密,最后与预设的密码比较。如果相同,输出 "you are right!",否则输出 "you are wrong!"。注意,这里使用了 strcmp 函数比较字符串是否相等,并且使用了 system("pause") 使程序暂停等待用户按任意键。
阅读全文