2 * display_basic.c - simple functions for writing to the screen of the vendie.
4 * Use set_msg(char[10]) to write a new message to the screen, replacing the
9 #include "display_basic.h"
12 /* private prototypes */
13 void display_send_byte(char c);
16 void set_msg(char newmsg[11]) {
22 for (i=0; i < 10; i++) {
23 if (newmsg[i] == 0) break;
25 display_send_byte(0xaf); // reset ptr to start
26 for (i--; i >= 0; i--) {
27 if (prevchar && newmsg[i] == 0x2E) {
28 display_send_byte(newmsg[i]&0x7f);
32 // check if next character is a period
33 if (newmsg[i] == 0x2E) {
39 display_send_byte(newmsg[i]&0x7f);
40 display_send_byte(prevchar&0x7f);
45 if (newmsg[i] == 0) break;
47 display_send_byte(newmsg[i]&0x7f);
51 display_send_byte(prevchar&0x7f);
56 void display_send_byte(char c) {
57 bset_misc_output(A3800_DISPLAY_WRITE); /* enable the display clock */
59 _io_ports[M6811_SPDR] = c; /* load SPI with byte */
60 while(!(_io_ports[M6811_SPSR]&M6811_SPIF)); /* wait for completion */
61 _io_ports[M6811_SPDR]; /* SPDR read to clear SPIF flag */
63 bclr_misc_output(A3800_DISPLAY_WRITE); /* disable the display clock */
66 #define DISPLAY_DELAY 20 /* ms to delay between ops - could be tweaked */
67 void display_reset() {
68 /* lower the reset line for a while */
69 bclr((void*)&_io_ports[M6811_PORTA], PORTA_DISP_RESET);
71 bset((void*)&_io_ports[M6811_PORTA], PORTA_DISP_RESET);
76 display_send_byte(0xC0 | 10); /* tell the controller there are 10 digits */
77 //display_send_byte(0xE0); /* set duty cycle to 0% */
78 display_send_byte(0xFF); /* set duty cycle to 100% */