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

📄 main.c

📁 2008年山东省大学生电子设计大赛 c题 多功能电子计价秤 单片机用的 c8051f005
💻 C
字号:
#include "include.h"


extern struct goods pre_set_goods[10];	//十个预置货物

extern unsigned int duanhaozub[32];
struct list list1;

uchar ad_tare_k;

float unit_price;				//单价
float weight;					//重量
float sum_price;				//总价
float price;					//价格
float tare;						//皮重
uchar name;						//商品代号
float m_tare=0;

void main()
{
	float temp;
	uchar key,list_num,thing_num=0,pre_num;
	sys_init();
	
	ad_tare_k=1;				//上电自动采集AD初值
	sum_price=0;
	unit_price=0;
	tare=0;
	list1.buy[11].name=0xff;	//将11号物品的名称设为ff作结束标志
	flash_re(pre_set_goods);		//读取10种预置商品
	list_num=flash_read_list_num();	//读取当前清单ID
	if(list_num>=100)list_num=0;
	
	lcd_init();
	uart_init();
	lcd_clr();
	for(;;)
	{
		lcd_display_face();						//显示主界面
		lcd_clr_page(0,72,88);
		lcd_display_yuan(32,0,unit_price);		//显示单价
		weight=convs_weight()-tare-m_tare;		//测重量
		lcd_clr_page(2,32,88);
		lcd_display_float(32,2,(float)weight);	//显示去皮后重量
		price=unit_price*(weight);			//计算价格
		lcd_clr_page(4,72,88);
		lcd_display_yuan(32,4,price);			//显示价格在(32,4)
		lcd_clr_page(6,72,88);
		lcd_display_yuan(32,6,sum_price);		//显示总价在(32,6)
		
		key=scan_key();							//检测键盘
		switch(key)
		{
			case 0x04:							//如果按下4键 将当前重量设为皮重
				if(tare==0)
					tare=weight;
				else
					tare=0;
				break;
			case 0x05:							//如果按下5键 累加总金额
				sum_price+=price;
				list1.sum_price+=price;
				list1.buy[thing_num].name=name;
				list1.buy[thing_num+1].name=0xff;	//将下一个物品的名称设为ff作结束标志
				list1.buy[thing_num].weight=weight;
				list1.buy[thing_num].unit_price=unit_price;
				thing_num++;
				break;
			case 0x06:							//如果按下6键 累加清零
				sum_price=0;break;
			case 0x01:							//如果按下1键 修改单价
				unit_price=input_float(32,0);break;
			case 0x02:							//如果按下2键 选择预置商品
				pre_num=get_pre_num();
				unit_price=pre_set_goods[pre_num].price;
				name=pre_set_goods[pre_num].name;
				lcd_clr();
				break;
			case 0x03:							//如果按下3键 修改预置单价
				set_pre_price();
				lcd_clr();
				break;
			case 0x07:							//如果按下7键 结束交易 保存清单
				list1.list_num=list_num;
				lcd_clr();
				temp=input_float(32,0);	//输入销售员编号
				while(temp>99)					//如果店员号大于99
				{
					lcd_clr();
					temp=input_float(32,0);	//输入销售员编号
				}
				list1.sales=(uchar)temp;
				list1.year=uc_R1302(0x8d);
				list1.month=uc_R1302(0x89);
				list1.day=uc_R1302(0x8b);
				list1.hour=uc_R1302(0x85);
				list1.minute=uc_R1302(0x83);
				
				if(list_num%4==0)
					flash_clr((uchar xdata *)(0x4c00+list_num*128));		//如果是扇区开始 清空此扇区
				flash_save((struct list xdata *)(0x4c00+list_num*128),list1);	//存储该清单
		
				lcd_displa_shifoudayin();					//显示"是否打印清单?"
				key=0xff;
				while(key==0xff)
					key=scan_key();
				if(key==0x0b|key==0X0a)
						print_list(list1);

				flash_clr(0x8000);								//清除FLASH的0x8000
				flash_wr(pre_set_goods,list_num);				//将预置商品数据和当前清单ID存入FLASH
				
				thing_num=0;
				list_num++;
				if(list_num==100)
					list_num=0;
				list1.sum_price=0;								//总金额数据清零
				sum_price=0;
				list1.buy[11].name=0xff;	//将11号物品的名称设为ff作结束标志
				lcd_clr();
				break;
			case 0x08:							//如果按下8键 查看历史清单
				show_list(list_num);
				lcd_clr();
				break;
			case 0x09:
				show_time();
				lcd_clr();
				break;
			case 0x0a:
				ad_tare_k=1;					//采集ad初值标志
				break;
			case 0x00:
				play(voice_yuan(0x0f,price));
				play(voice_zhong(weight));
				play(voice_yuan(0x10,sum_price));
				break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -