📄 calc.c
字号:
//-----------------------------------------------------------------
// 名称: 电子秤价格输入与金额计算程序
//-----------------------------------------------------------------
#include <pic.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define _XTAL_FREQ 1000000UL
#define INT8U unsigned char
#define INT16U unsigned int
//蜂鸣器定义
#define BEEP() RC7 = ~RC7
//按键判断及按键键值
#define Key_Pressed (RB6 == 1) //DA(RB6)为高电平时有键按下
#define Key_NO (PORTC & 0x0F) //解码器输出线连接在PORTC低四位
//键盘字符表(其中注意2,5,8后各保留一个空格)
const char KEY_CHAR_TABLE[] = "012 345 678 9.C";
//液晶显示字符串函数
extern void LCD_ShowString(INT8U x, INT8U y,char *str);
//LCD显示输出缓冲(价格/重量/金额)的最大长度
//因为要预留结束标志,实际串长比定义少1位
#define PLEN 7
#define WLEN 4
#define SUMLEN 10
//LCD显示输出缓冲(价格/重量/金额)
char disp_buffer_P[PLEN];
char disp_buffer_W[WLEN];
char disp_buffer_SUM[SUMLEN];
//价格输入缓冲的指针
INT8U NumberPtr = 0;
//-----------------------------------------------------------------
// 蜂鸣器输出
//-----------------------------------------------------------------
void Sounder()
{
INT16U i;
for (i = 0; i < 350; i++) { BEEP(); __delay_us(120); }
}
//-----------------------------------------------------------------
// 处理运算并显示金额
//-----------------------------------------------------------------
void Compute_and_show_sum()
{
}
//-----------------------------------------------------------------
// 处理键盘操作
//-----------------------------------------------------------------
void KeyBoard_Handle()
{
char KeyChar;
//是否已经输入了价格P的小数点
static INT8U havedot = 0;
//在还没有输入价格中的小数点时可继续输入字符的个数(dtnum初始时默认为7)
static INT8U dtnum = PLEN;
//如果有键按下则获取按键字符(根据解码器DA引脚是否输出高电平来判断)
if (Key_Pressed)
{
//每次按键时输出按键提示音
Sounder();
//根据键值获取按键字符
KeyChar = KEY_CHAR_TABLE[Key_NO];
//如果输入的是数字字符或小数点(但此前未输入过小数点)
//----------------------------------------------------------
if (isdigit(KeyChar) || (KeyChar == '.' && !havedot))
{
//在目前还未输入小数点,且当前输入的不是小数点,而此时串长已为3时返回
//(由于输入范围为0~999.99,程序不允许输入3位以上的整数)
//将所输入的字符存入缓冲
if (NumberPtr < dtnum)
{
}
//遇到小数点且此前未输入过小数点则开始限定可输入的小数位
if (KeyChar == '.' && !havedot)
{
}
}
//清除当前所输入的价格
//----------------------------------------------------------
else if (KeyChar == 'C')
{
}
if (Key_Pressed) Compute_and_show_sum(); //计算并显示总金额
while (Key_Pressed); //等待按键释放
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -