- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机矩阵键盘计算器
51单片机矩阵键盘计算器
/**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************/
/***功能:1、基本整数的加减乘除; 2、有清除功能;3、除法计算,结果保留两位小数;4、分母为0报错********/
/*********5、小数减大数可显示负号;6、只能做两个数的加减乘除;7、可做10位数的有效运算***********************************/
/******注意:计算结果要求余显示,比如正确结果123,求余显示321,所以将321逐个赋给某一数组,倒序向12864输出**/
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit rs=P3^7;
sbit rw=P3^6;
sbit e=P3^5;
sbit psb=P3^4; //串并选择,H=串 L=并,此程序让12864并行输出
bit flag1=0; //数字标记位
bit flag11=0; // +标记位
bit flag12=0; // —标记位
bit flag13=0; // *标记位
bit flag14=0; // /标记位
bit flag15=0; // =标记位
bit flag16=0; //清除位
bit flag2=0; // 负号标记
bit flag3=0; // 分子小于分母,结果只有两位有效数字时,扩大100倍有两位有效数字
bit flag4=0; // 分子小于分母,结果只有一位效数字时,扩大100倍有1位有效数字
void init(); //初始化16824子函数
void write_com(uchar); //写命令
void write_dat(uchar); //写数据,即显示内容
void display1(uchar); //显示字符
void delete(); //清除显示
void delay(uint); //延时
void keyscan(); //键盘扫描
void scan(); //扫描运算符,设定两个数计算
void display_value(); // 计算结果显示
void value(); // 计算
void begin(); //开机屏幕显示
void math_error(); //数学错误显示
uchar code table1[]=0123456789.+-*/=;
uchar code table3[]=welcome to;
uchar code table4[]= 51 calculator ;
uchar code table5[]=math error;
long table2[19]; //存储结果的数组,20就出错?
long s,a,b,num1; //s为计算结果,a为第一个数,b为第二个数,num1对应为键对应的值为显12864显示服务
/***********************************主**函**数***********************************************************/
void main()
{
init();
delay(5);
begin(); //开机初始化
delay(5);
write_com(0x80); //输入数在第一行显示
while(1) //大循环使其不断的显示
{
keyscan();
scan();
value();
display_value();
delete();
}
}
/***********初始化********************************/
void init()
{
psb=1; //并口传输方式
delay(50); //先等待50个毫秒
write_com(0x30); //基本操作指令
delay(5);
write_com(0x0e); //显示状态开/关,08什么也没有;0c无光标;0e有光标但不闪;0f
文档评论(0)