int shift_run(void *ctx) { #if 0 unsigned int elapsed_time; unsigned int current_time = timer_ticks; if (last_shift_time > current_time) { //handle clock overflow case elapsed_time = (65535 - last_shift_time) + current_time; } else { elapsed_time = current_time - last_shift_time; } if (elapsed_time > (100)) { last_shift_time += 100; printf("HC595Write: %02x\n", led_pattern[current_pattern]); HC595Write(led_pattern[current_pattern]); current_pattern++; if (current_pattern >= 8) { current_pattern = 0; } } #endif return 0; }
int main(void){ //Initialize 74HC595 HC595Init(); //Initialize CD4017 CD4017Init(); while(1){ for(uint8_t i = 0; i < 8; i++){ HC595Write(matrix1); _delay_ms(2000); CD4017Pulse(); HC595Write(matrix2); _delay_ms(2000); CD4017Pulse(); //_delay_ms(2000); } } }
int shift_value(int argc, char* argv[], void *ctx) { int i; uint8_t value = 0; char *p; if (argc < 2) { printf("Usage: shift 01001101\n"); return 0; } if (argc == 2) { p = argv[1]; for (i = 0; i < 8; i++) { if (*p == '\0') { printf("Usage: shift 01001101\n"); return 0; } if (*p != '1' && *p != '0') { printf("Usage: shift 01001101\n"); return 0; } if (*p == '1') { value |= (1 << (7-i)); } p++; } } else { if (strncmp(argv[1], "bit", 3) == 0) { uint8_t bit = 0; bit = *argv[2] - '0'; printf("BIT: %d\n", bit); if (bit < 0 || bit > 8) { printf("Bit out of range\n"); return 0; } if (current_value & (1<<bit)) { value = current_value & ~(1 << bit); } else { value = current_value | (1 << bit); } } } printf("Shifting %02x into register\n", value); current_value = value; HC595Write(value); return 0; }