![](/media/cache/group/ppp_Bl1j27I.jpg.50x50_q85.jpg)
Help me photohunt
Dependencies: mbed
main.cpp
- Committer:
- Peeraya
- Date:
- 2015-11-28
- Revision:
- 0:ff615d611c5c
File content as of revision 0:ff615d611c5c:
#ifndef __TTSDISPLAY_H__ #define __TTSDISPLAY_H__ #ifndef uchar #define uchar char #endif // definitions for TM1636 #define ADDR_AUTO 0x40 #define ADDR_FIXED 0x44 #define STARTADDR 0xc0 // definitions for the clock point of the digit tube #define POINT_ON 1 #define POINT_OFF 0 // definitions for brightness #define BRIGHT_DARKEST 0 #define BRIGHT_TYPICAL 2 #define BRIGHTEST 7 //Special characters index of tube table #define INDEX_NEGATIVE_SIGH 16 #define INDEX_BLANK 17 class TTSDisplay{ private: uchar Cmd_SetData; uchar Cmd_SetAddr; uchar Cmd_Dispdisplay; uchar _PointFlag; //_PointFlag=1:the clock point on uchar _brightness; uchar Clkpin; uchar Datapin; uchar dtaDisplay[4]; private: void writeByte(uchar wr_data); //write 8bit data to tm1637 void start(void); //send start bits void stop(void); //send stop bits void set(uchar = BRIGHT_TYPICAL, uchar = 0x40, uchar = 0xc0); //To take effect the next time it displays. uchar coding(uchar DispData); //********************************************************************************************************** //*************************** USER INTERFACE *************************************************************** //********************************************************************************************************** public: TTSDisplay(); void display(uchar loca, uchar dta); // display a single num(0-9) void num(int dta); // display a num (0-9999) void time(uchar hour, uchar min); // display time, such as: 11:26 void clear(); // clear display void pointOn(); // display : void pointOff(); // undisplay : }; #endif //#include <Arduino.h> #include<mbed.h> //#include <Streaming.h> //#include "TTSDisplay.h" //0~9,A,b,C,d,E,F,"-"," " const uchar TubeTab[] = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, 0x40,0x00 }; //#define PINCLK 7 // pin of clk //#define PINDTA 8 // pin of data TTSDisplay::TTSDisplay() { DigitalOut Clkpin(D7); DigitalOut Datapin(D8); /*Clkpin = PINCLK; Datapin = PINDTA; pinMode(Clkpin,OUTPUT); pinMode(Datapin,OUTPUT);*/ for(int i=0; i<4; i++) { dtaDisplay[i] = 0x00; } set(); //clear(); } /********************************************************************************************************* * Function Name: display * Description: display a num in certain location * Parameters: loca - location, 3-2-1-0 * num - number to display * Return: None *********************************************************************************************************/ void TTSDisplay::display(uchar loca, uchar dta) { //if(loca > 3 || loca < 0) return; if(loca > 3) return; dtaDisplay[loca] = dta; loca = 3-loca; uchar segData = coding(dta); start(); //start signal sent to TM1637 from MCU writeByte(ADDR_FIXED); stop(); start(); writeByte(loca|0xc0); writeByte(segData); stop(); start(); writeByte(Cmd_Dispdisplay); stop(); } /********************************************************************************************************* * Function Name: num * Description: display a num that 0 - 9999 * Parameters: num - number to display * Return: None *********************************************************************************************************/ void TTSDisplay::num(int dta) { if(dta < 0 || dta > 9999) return; // bad data //clear(); pointOff(); if(dta < 10) { display(0, dta); display(1, 0x7f); display(2, 0x7f); display(3, 0x7f); } else if(dta < 100) { display(1, dta/10); display(0, dta%10); display(2, 0x7f); display(3, 0x7f); } else if(dta < 1000) { display(2, dta/100); display(1, (dta/10)%10); display(0, dta%10); display(3, 0x7f); } else { display(3, dta/1000); display(2, (dta/100)%10); display(1, (dta/10)%10); display(0, dta%10); } } /********************************************************************************************************* * Function Name: time * Description: display time * Parameters: hour - hour * min - minutes * Return: None *********************************************************************************************************/ void TTSDisplay::time(uchar hour, uchar min) { // if(hour > 24 || hour < 0) return; // bad data if(hour > 24) return; // bad data // if(min > 60 || min < 0) return; // bad data if(min > 60) return; // bad data display(3, hour/10); display(2, hour%10); display(1, min/10); display(0, min%10); } /********************************************************************************************************* * Function Name: clear * Description: clear all * Parameters: None * Return: None *********************************************************************************************************/ void TTSDisplay::clear() { display(0x00,0x7f); display(0x01,0x7f); display(0x02,0x7f); display(0x03,0x7f); } /********************************************************************************************************* * Function Name: writeByte * Description: write a byte to tm1636 * Parameters: wr_data: data to write * Return: None *********************************************************************************************************/ void TTSDisplay::writeByte(uchar wr_data) { uchar i,count1; for(i=0;i<8;i++) // sent 8bit data { Clkpin=0; //digitalWrite(Clkpin,LOW); //if(wr_data & 0x01)digitalWrite(Datapin,HIGH); // LSB first if(wr_data & 0x01)Datapin=1; // LSB first //else digitalWrite(Datapin,LOW); else Datapin=0; wr_data >>= 1; Clkpin=1; //digitalWrite(Clkpin,HIGH); } Clkpin=0; Datapin=1; Clkpin=1; DigitalIn Datapin(D8); /*digitalWrite(Clkpin,LOW); // wait for the ACK digitalWrite(Datapin,HIGH); digitalWrite(Clkpin,HIGH); pinMode(Datapin,INPUT);*/ //while(digitalRead(Datapin)) while(Datapin) { count1 += 1; if(200 == count1) { //pinMode(Datapin,OUTPUT); DigitalOut Datapin(D8); //digitalWrite(Datapin,LOW); Datapin=0; count1 =0; } //pinMode(Datapin,INPUT); DigitalIn Datapin(D8); } //pinMode(Datapin,OUTPUT); //DigitalOut Datapin(D8); } /********************************************************************************************************* * Function Name: start * Description: send start signal to TTSDisplay * Parameters: None * Return: None *********************************************************************************************************/ void TTSDisplay::start(void) { /*digitalWrite(Clkpin,HIGH); //send start signal to TM1637 digitalWrite(Datapin,HIGH); digitalWrite(Datapin,LOW); digitalWrite(Clkpin,LOW);*/ Clkpin=1; Datapin=1; Datapin=0; Clkpin=0; } /********************************************************************************************************* * Function Name: stop * Description: send end signal * Parameters: None * Return: None *********************************************************************************************************/ void TTSDisplay::stop(void) {/* digitalWrite(Clkpin,LOW); digitalWrite(Datapin,LOW); digitalWrite(Clkpin,HIGH); digitalWrite(Datapin,HIGH);*/ Clkpin=0; Datapin=0; Clkpin=1; Datapin=1; } /********************************************************************************************************* * Function Name: set * Description: init * Parameters: brightness - brightness * SetDta - data * SetAddr - address * Return: None *********************************************************************************************************/ void TTSDisplay::set(uchar brightness,uchar SetData,uchar SetAddr) { _brightness = brightness; Cmd_SetData = SetData; Cmd_SetAddr = SetAddr; Cmd_Dispdisplay = 0x88 + brightness; } /********************************************************************************************************* * Function Name: pointOn * Description: display : * Parameters: None * Return: None *********************************************************************************************************/ void TTSDisplay::pointOn() { _PointFlag = 1; for(int i=0; i<4; i++) { display(i, dtaDisplay[i]); } } /********************************************************************************************************* * Function Name: pointOff * Description: no : * Parameters: None * Return: None *********************************************************************************************************/ void TTSDisplay::pointOff() { _PointFlag = 0; for(int i=0; i<4; i++) { display(i, dtaDisplay[i]); } } /********************************************************************************************************* * Function Name: coding * Description: coding * Parameters: None * Return: None *********************************************************************************************************/ uchar TTSDisplay::coding(uchar DispData) { uchar PointData = _PointFlag ? 0x80 : 0x00; DispData = (0x7f == DispData) ? PointData : (TubeTab[DispData]+PointData); return DispData; } /********************************************************************************************************* END FILE *********************************************************************************************************/ //#include <Wire.h> //#include <TTSDisplay.h> //TTSDisplay disp; // instantiate an object /*void setup() { // nothing to setup }*/ int main() { TTSDisplay disp; while(1) { disp.time(11,26); // display time, 11:26 disp.pointOn(); // display : wait_ms(1000); // wait 1s } } /********************************************************************************************************* END FILE *********************************************************************************************************/