⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 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 + -