Binary Calculator code and directories

Dependencies:   4DGL-uLCD-SE DebounceIn PinDetect mbed

Fork of uLCD144G2_demo by jim hamblen

Code for binary calculator which calculates AND OR NOR NAND and binary addition and subtraction

Demo video showing the calculator and the functions: /media/uploads/nickw0606/img_0261.mov

Committer:
4180_1
Date:
Wed Nov 20 03:26:19 2013 +0000
Revision:
5:a1ef40ff0f78
Parent:
4:25a266a74a4c
Child:
6:f752accd632c
ver1.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:cfcf73272647 1 //
4180_1 0:cfcf73272647 2 // TFT_4DGL is a class to drive 4D Systems TFT touch screens
4180_1 0:cfcf73272647 3 //
4180_1 0:cfcf73272647 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
4180_1 0:cfcf73272647 5 //
4180_1 0:cfcf73272647 6 // TFT_4DGL is free software: you can redistribute it and/or modify
4180_1 0:cfcf73272647 7 // it under the terms of the GNU General Public License as published by
4180_1 0:cfcf73272647 8 // the Free Software Foundation, either version 3 of the License, or
4180_1 0:cfcf73272647 9 // (at your option) any later version.
4180_1 0:cfcf73272647 10 //
4180_1 0:cfcf73272647 11 // TFT_4DGL is distributed in the hope that it will be useful,
4180_1 0:cfcf73272647 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
4180_1 0:cfcf73272647 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4180_1 0:cfcf73272647 14 // GNU General Public License for more details.
4180_1 0:cfcf73272647 15 //
4180_1 0:cfcf73272647 16 // You should have received a copy of the GNU General Public License
4180_1 0:cfcf73272647 17 // along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>.
4180_1 0:cfcf73272647 18
4180_1 0:cfcf73272647 19 #include "mbed.h"
4180_1 2:75727e89a717 20 #include "uLCD_4DGL.h"
4180_1 0:cfcf73272647 21
4180_1 2:75727e89a717 22 #define SIZE_X 128
4180_1 2:75727e89a717 23 #define SIZE_Y 128
4180_1 1:38ef731c7bdf 24 //
4180_1 1:38ef731c7bdf 25
4180_1 2:75727e89a717 26 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
4180_1 0:cfcf73272647 27
4180_1 2:75727e89a717 28 int main()
4180_1 2:75727e89a717 29 {
4180_1 5:a1ef40ff0f78 30 int pixelcolors[40][40];
4180_1 3:454d1f4c8fd7 31 // basic printf demo = 16 by 18 characters on screen
4180_1 3:454d1f4c8fd7 32 uLCD.printf("\nHello uLCD World\n"); //Default Green on black text
4180_1 3:454d1f4c8fd7 33 uLCD.printf("\n Starting Demo...");
4180_1 3:454d1f4c8fd7 34 uLCD.text_width(4); //4X size text
4180_1 3:454d1f4c8fd7 35 uLCD.text_height(4);
4180_1 3:454d1f4c8fd7 36 uLCD.color(RED);
4180_1 3:454d1f4c8fd7 37 for (int i=10; i>=0; --i) {
4180_1 3:454d1f4c8fd7 38 uLCD.locate(1,2);
4180_1 3:454d1f4c8fd7 39 uLCD.printf("%2D",i);
4180_1 3:454d1f4c8fd7 40 wait(.5);
4180_1 3:454d1f4c8fd7 41 }
4180_1 3:454d1f4c8fd7 42 uLCD.cls();
4180_1 3:454d1f4c8fd7 43 uLCD.baudrate(256000); //jack up baud rate to max
4180_1 3:454d1f4c8fd7 44 //demo graphics
4180_1 2:75727e89a717 45 uLCD.background_color(DGREY);
4180_1 2:75727e89a717 46 uLCD.circle(60, 50, 30, 0xFF00FF);
4180_1 2:75727e89a717 47 uLCD.triangle(120, 100, 40, 40, 10, 100, 0x0000FF);
4180_1 2:75727e89a717 48 uLCD.line(0, 0, 80, 60, 0xFF0000);
4180_1 2:75727e89a717 49 uLCD.rectangle(50, 50, 100, 90, 0x00FF00);
4180_1 2:75727e89a717 50 uLCD.pixel(60, 60, BLACK);
4180_1 2:75727e89a717 51 uLCD.read_pixel(120, 70);
4180_1 2:75727e89a717 52 uLCD.circle(120, 60, 10, BLACK);
4180_1 3:454d1f4c8fd7 53 uLCD.set_font(FONT_7X8);
4180_1 2:75727e89a717 54 uLCD.text_mode(TRANSPARENT);
4180_1 2:75727e89a717 55 uLCD.text_char('B', 9, 8, BLACK);
4180_1 2:75727e89a717 56 uLCD.text_char('I',10, 8, BLACK);
4180_1 2:75727e89a717 57 uLCD.text_char('G',11, 8, BLACK);
4180_1 3:454d1f4c8fd7 58 uLCD.text_string("This is a test of string", 1, 4, FONT_7X8, WHITE);
4180_1 3:454d1f4c8fd7 59 wait(2);
4180_1 3:454d1f4c8fd7 60 // printf text only mode demo
4180_1 3:454d1f4c8fd7 61 uLCD.background_color(BLUE);
4180_1 3:454d1f4c8fd7 62 uLCD.cls();
4180_1 3:454d1f4c8fd7 63 uLCD.locate(0,0);
4180_1 3:454d1f4c8fd7 64 uLCD.color(WHITE);
4180_1 3:454d1f4c8fd7 65 uLCD.textbackground_color(BLUE);
4180_1 3:454d1f4c8fd7 66 uLCD.set_font(FONT_7X8);
4180_1 3:454d1f4c8fd7 67 uLCD.text_mode(OPAQUE);
4180_1 3:454d1f4c8fd7 68 int i=0;
4180_1 3:454d1f4c8fd7 69 while(i<64) {
4180_1 3:454d1f4c8fd7 70 if(i%16==0) uLCD.cls();
4180_1 3:454d1f4c8fd7 71 uLCD.printf("TxtLine %2D Page %D\n",i%16,i/16 );
4180_1 3:454d1f4c8fd7 72 i++; //16 lines with 18 charaters per line
4180_1 3:454d1f4c8fd7 73 }
4180_1 5:a1ef40ff0f78 74 //draw an image using BLIT (Block Image Transfer) fastest way to transfer pixel data
4180_1 4:25a266a74a4c 75 uLCD.background_color(BLACK);
4180_1 4:25a266a74a4c 76 uLCD.cls();
4180_1 5:a1ef40ff0f78 77 for(int i=0; i<40; i++) {
4180_1 5:a1ef40ff0f78 78 for(int k=0; k<40; k++) {
4180_1 5:a1ef40ff0f78 79 pixelcolors[i][k] = RED;
4180_1 5:a1ef40ff0f78 80 }
4180_1 4:25a266a74a4c 81 }
4180_1 5:a1ef40ff0f78 82 uLCD.BLIT(50, 50, 40, 40, &pixelcolors[0][0]);
4180_1 4:25a266a74a4c 83 wait(5);
4180_1 3:454d1f4c8fd7 84 //draw an image pixel by pixel
4180_1 3:454d1f4c8fd7 85 uLCD.background_color(BLACK);
4180_1 3:454d1f4c8fd7 86 uLCD.cls();
4180_1 3:454d1f4c8fd7 87 //compute Mandelbrot image for display
4180_1 3:454d1f4c8fd7 88 //image size in pixels and setup
4180_1 3:454d1f4c8fd7 89 const unsigned ImageHeight=128;
4180_1 3:454d1f4c8fd7 90 const unsigned ImageWidth=128;
4180_1 3:454d1f4c8fd7 91 double MinRe = -0.75104;
4180_1 3:454d1f4c8fd7 92 double MaxRe = -0.7408;
4180_1 3:454d1f4c8fd7 93 double MinIm = 0.10511;
4180_1 3:454d1f4c8fd7 94 double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
4180_1 3:454d1f4c8fd7 95 double Re_factor = (MaxRe-MinRe)/(ImageWidth-1);
4180_1 3:454d1f4c8fd7 96 double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
4180_1 3:454d1f4c8fd7 97 unsigned MaxIterations = 4096;
4180_1 3:454d1f4c8fd7 98 for(unsigned y=0; y<ImageHeight; ++y) {
4180_1 3:454d1f4c8fd7 99 double c_im = MaxIm - y*Im_factor;
4180_1 3:454d1f4c8fd7 100 for(unsigned x=0; x<ImageWidth; ++x) {
4180_1 3:454d1f4c8fd7 101 double c_re = MinRe + x*Re_factor;
4180_1 3:454d1f4c8fd7 102 double Z_re = c_re, Z_im = c_im;
4180_1 3:454d1f4c8fd7 103 bool isInside = true;
4180_1 3:454d1f4c8fd7 104 int niterations=0;
4180_1 3:454d1f4c8fd7 105 for(unsigned n=0; n<MaxIterations; ++n) {
4180_1 3:454d1f4c8fd7 106 double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;
4180_1 3:454d1f4c8fd7 107 if(Z_re2 + Z_im2 > 4) {
4180_1 3:454d1f4c8fd7 108 niterations = n;
4180_1 3:454d1f4c8fd7 109 isInside = false;
4180_1 3:454d1f4c8fd7 110 break;
4180_1 3:454d1f4c8fd7 111 }
4180_1 3:454d1f4c8fd7 112 Z_im = 2*Z_re*Z_im + c_im;
4180_1 3:454d1f4c8fd7 113 Z_re = Z_re2 - Z_im2 + c_re;
4180_1 3:454d1f4c8fd7 114 }
4180_1 5:a1ef40ff0f78 115 if(isInside==false) uLCD.pixel(x,y,((niterations & 0xF00)<<12)+((niterations & 0xF0)<<8)+((niterations & 0x0F)<<4) );
4180_1 3:454d1f4c8fd7 116 }
4180_1 3:454d1f4c8fd7 117 }
4180_1 5:a1ef40ff0f78 118 wait(5);
4180_1 5:a1ef40ff0f78 119 // PLASMA wave BLIT animation
4180_1 5:a1ef40ff0f78 120 uLCD.cls();
4180_1 5:a1ef40ff0f78 121 int num_cols=40;
4180_1 5:a1ef40ff0f78 122 int num_rows=40;
4180_1 5:a1ef40ff0f78 123 double a,b,c=0.0;
4180_1 5:a1ef40ff0f78 124 while(1) {
4180_1 5:a1ef40ff0f78 125 for (int k=0; k<num_cols; k++) {
4180_1 5:a1ef40ff0f78 126 b= (1+sin(3.14159*k*0.75/(num_cols-1.0)+c))*0.5;
4180_1 5:a1ef40ff0f78 127 for (int i=0; i<num_rows; i++) {
4180_1 5:a1ef40ff0f78 128 a= (1+sin(3.14159*i*0.75/(num_rows-1.0)+c))*0.5;
4180_1 5:a1ef40ff0f78 129 // a and b will be a sine wave output between 0 and 1
4180_1 5:a1ef40ff0f78 130 // sine wave was scaled for nice effect across array
4180_1 5:a1ef40ff0f78 131 // uses a and b to compute pixel colors based on rol and col location in array
4180_1 5:a1ef40ff0f78 132 // also keeps colors at the same brightness level
4180_1 5:a1ef40ff0f78 133 if ((a+b) <.667)
4180_1 5:a1ef40ff0f78 134 pixelcolors[i][k] = (255-(int(240.0*((a+b)/0.667)))<<16) | (int(240.0*((a+b)/0.667))<<8) | 0;
4180_1 5:a1ef40ff0f78 135 else if ((a+b)<1.333)
4180_1 5:a1ef40ff0f78 136 pixelcolors[i][k] = (0 <<16) | (255-(int (240.0*((a+b-0.667)/0.667)))<<8) | int(240.0*((a+b-0.667)/0.667));
4180_1 5:a1ef40ff0f78 137 else
4180_1 5:a1ef40ff0f78 138 pixelcolors[i][k] = (int(255*((a+b-1.333)/0.667))<<16) | (0<<8) | (255-(int (240.0*((a+b-1.333)/0.667))));
4180_1 5:a1ef40ff0f78 139 }
4180_1 5:a1ef40ff0f78 140 }
4180_1 5:a1ef40ff0f78 141 uLCD.BLIT(50, 50, 40, 40, &pixelcolors[0][0]);
4180_1 5:a1ef40ff0f78 142 c = c + 0.0314159*3.0;
4180_1 5:a1ef40ff0f78 143 if (c > 6.2831) c = 0.0;
4180_1 5:a1ef40ff0f78 144 }
4180_1 5:a1ef40ff0f78 145 }