calc8051/calc.c

91 lines
1.2 KiB
C
Raw Normal View History

2024-06-06 21:40:14 +02:00
#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();
}
}