91 lines
1.2 KiB
C
91 lines
1.2 KiB
C
|
|
||
|
#include "mc8051fun/mc8051fun.h"
|
||
|
#include "mc8051fun/lcd.h"
|
||
|
|
||
|
#define NBYTES 8
|
||
|
#define BCDBYTES (NBYTES+NBYTES/2)
|
||
|
|
||
|
__xdata uint8_t val0[NBYTES];
|
||
|
__xdata uint8_t val1[NBYTES];
|
||
|
__xdata uint8_t result[NBYTES];
|
||
|
__xdata uint8_t rest[NBYTES];
|
||
|
__xdata uint8_t bcd[BCDBYTES];
|
||
|
|
||
|
|
||
|
static void init (void)
|
||
|
{
|
||
|
lcd_cmd(LCD_SET_FUNCTION | LCD_FUNCTION_8BIT | LCD_FUNCTION_2LINE);
|
||
|
lcd_cmd(LCD_SET_DISPLAY | LCD_DISPLAY_ON);
|
||
|
lcd_cmd(LCD_CLEAR_DISPLAY);
|
||
|
lcd_cmd(LCD_SET_DDADR);
|
||
|
}
|
||
|
|
||
|
static void putchar(char c)
|
||
|
{
|
||
|
lcd_chr(c);
|
||
|
}
|
||
|
static void lcd_str (char *p)
|
||
|
{
|
||
|
while(*p){
|
||
|
putchar(*p++);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void zero_val(__xdata uint8_t * ptr)
|
||
|
{
|
||
|
for(int i=0; i<NBYTES; i++){
|
||
|
ptr[i]=0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void val0tobcd()
|
||
|
{
|
||
|
__asm
|
||
|
mov r7,#NBYTES
|
||
|
mov r6,#BCDBYTES
|
||
|
mov r0,#_val0
|
||
|
mov r1,#_bcd
|
||
|
acall long_xtobcd
|
||
|
__endasm;
|
||
|
}
|
||
|
|
||
|
static void printbcdval()
|
||
|
{
|
||
|
uint8_t b;
|
||
|
for(int i=BCDBYTES-6; i>=0; i--){
|
||
|
b=bcd[i]>>4;
|
||
|
putchar(b+0x30);
|
||
|
b=bcd[i]&0xf;
|
||
|
putchar(b+0x30);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void val0val1_add()
|
||
|
{
|
||
|
__asm
|
||
|
mov r0,#_val0
|
||
|
mov r1,#_val1
|
||
|
mov r7,#NBYTES
|
||
|
lcall long_xadd
|
||
|
__endasm;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
init();
|
||
|
zero_val(val0);
|
||
|
zero_val(val1);
|
||
|
|
||
|
val1[0]=0x01;
|
||
|
lcd_str("Hello World!");
|
||
|
while(1){
|
||
|
val0val1_add();
|
||
|
val0tobcd();
|
||
|
|
||
|
lcd_cmd(LCD_GOTO_LINE2);
|
||
|
printbcdval();
|
||
|
}
|
||
|
}
|