单片机计算器(重理工大二课程设计)计算范围-4294967295至+4294
更新时间:2024-04-08 05:36:01 阅读量: 综合文库 文档下载
- 单片机计算器课程设计推荐度:
- 相关推荐
课程:电子综合设计实验
项目:计算器
学期:2011.2~2011.7
学院:电子信息与自动化学院 专业: 自动化 班级: 713 姓名: 王瀚兴 学号: 10807010325 指导教师: 陈古波
电工电子技术实验中心
一、设计任务和目标
1.1 设计任务
利用单片机设计一个计算器,要求
(1)键盘包含加、减、乘、除及数字键。
(2)能够显示输入数字并显示公式,计算结果。 (3)四种运算都可以实现。
1.2 性能指标
(1)单片机程序设计使用KeilC51实现。编译器使用long int,因此运算范围为±2147483648,并且浮点数精度总是15位。如果数据溢出,自动提示溢出错误信息。
(2)可运算加、减、乘、除在内的四种运算。包括显示正数与负数。除零错误将自动提示。显示公式。
(3)ON键用于清空并重新输入。
二、设计方案
按照单片机设计功能的要求,初步确定硬件系统由主控模块,显示模块,键扫描电路模块等组成。电路构成框图如图2-1所示。主控芯片使用51系列AT89C52单片机,该单片机采用高性能静态89C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能,低功耗8位CMOS处理芯片,市场应用很多。
图2-1 计算器电路构成原理图
软件系统由键盘扫描模块、数据计算模块、数据纠错模块、数据显示模块等构成。
三、系统硬件设计
3.1单片机最小系统
单片机最小系统就是支持主芯片正常工作的最小部分,包括主控芯片和晶振电路部分。
主控芯片选取STC89C52RC芯片,因其具有良好的性能和稳定性,价格便宜使用方便。 晶振选用1MHZ,晶振旁电容选用1pf。 下面是单片机最小系统的电路图:
图3-1单片机最小系统电路图
3.2键盘接口电路
计算器所需按键有 数字键: “0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”。 功能键:“+”、“-”、“×”、“÷”、“=”、“ON(清零)”。
共计16个按键,行列均连接有公共端,连接至单片机的P3.0—P3.7端口。这样扫描P3口就可以完成对所有键盘的扫描,通过对16个按键的编码,从而得到键盘端口地址。分别进行行扫描和列扫描,确定按键,经过单片机处理后输入数据至LED显示屏,完成了键盘的功能。
下面为键盘接口电路图。
图3-2键盘接口电路
3.3数码显示电路
数码显示电路采用的是LM016L显示器。 基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:
1602LCD尺寸图
1602LCD主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H) 引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编符 引脚说明 编 符 引脚说明 号 号 号 号
1 V9 D2 电源地 数据
S S 2 V10 D3 电源正极 数据
D D 3 V11 D4 液晶显示偏压 数据
L 4 RS 12 D5 数据/命令选择 数据 5 R/ 13 D6 读/写选择 数据
W 6 E 14 D7 使能信号 数据 7 D0 15 BL 背光源正极 数据
A
8 D1 16 BL 背光源负极 数据
K
表10-13:引脚接口说明表 第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 2LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:
RRDDDDDD序指令
D0
S /W 7 6 5 4 3 2 1 号
1 0 0 0 0 0 00 0 1 清显示 2 0 0 0 0 0 00 1 * 光标返回
I/置输入模
3 0 0 0 0 0 00 S
D 式
显示开/关
4 0 0 0 0 0 01 C B
控制 光标或字
S
5 0 0 0 0 0 1/* * 符移位
/C
L
D置功能
6 0 0 0 0 1 N * *
L
置字符发字符发生存贮器地址
7 0 0 0 1
生存贮器地址
置数据存显示数据存贮器地址
8 0 0 1
贮器地址
B读忙标志计数器地址
9 0 1
F 或地址
写数到要写的数据内容
1
1 0 CGRAM或
0
DDRAM)
从读出的数据内容
1
1 1 CGRAM或
1
DDRAM读数 表10-14:控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
图 字符代码与图形对应表 下面为数码显示电路电路图。
图3-3数码显示电路
四、系统软件设计
4.1键盘扫描程序设计
要进行数据计算就需要先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对按键进行扫描,从而确定是哪个按键按下了。
按键扫描的程序代码非常清晰易懂,并且写好了注释。下面是源代码。
//按键处理命令 //获取按键位置//16为无按键按下 uchar KeyPosRowScan()//返回行扫描结果
{
uchar Temp=0;//扫描状态暂存。 uchar Row;//行号 P3=0x0f;
Temp=P3;//暂存P2状态 for(Row=0;Row<4;Row++)
if(Temp!=0x0f)//若有按键按下 {
if(RowScan[Row]==Temp) return Row; }
return 4;//无按键按下 }
uchar KeyPosLineScan()//返回列扫描结果 {
uchar Temp=0;//扫描状态暂存。 uchar Line;//列号。 P3=0xf0;
Temp=P3;//暂存P2状态 for(Line=0;Line<4;Line++)
if(Temp!=0xf0)//若可能有按键按下 {
if(LineScan[Line]==Temp)return Line; }
return 4;//无按键按下 }
uchar KeyPosScan()//返回按键位置 {
return KeyPosRowScan()*4+KeyPosLineScan(); }
调用的时候只需调用uchar KeyPosScan()函数即可返回按键位置,若无按键按下,由于KeyPosRowScan()返回4,KeyPosLineScan()返回4,故该函数返回20,代表无按键按下。
如有任何按键按下,函数将按行列返回按键位置值为0-15。
但是为解释位置的真正数值是多少,需要写一个位置按键的解释程序。 //返回指定位置按键的键值
uchar GetPosKeyID(uchar keypos) {
switch(keypos)
{
case 13: return 0; case 8: return 1; case 9: return 2; case 10: return 3; case 4: return 4; case 5: return 5; case 6: return 6; case 0: return 7; case 1: return 8; case 2: return 9; case 15: return 10; case 11: return 11; case 7: return 12; case 3: return 13; case 14: return 14; case 12: return 15; case 20: return 16; default: return 17; } }
这样就很好的解释了键值。
// // // // // // // // // // // // // // // // // // 0 1 2 3 4 5 6 7 8 9 + - * / = On\\C 无按键 奇怪的事情
4.3主功能软件模块
下面是主程序源代码
//功能部分
uchar InputChar(int *mem,uchar id)//返回值赋给showflag {
uchar key;
if(id==0){offsetcursor1=0;Data[4]=0;} while(1) {
if(KeyPosScan()!=20) {
Delay(15);//防抖动
key=GetPosKeyID(KeyPosScan()); if(key<10)//按下了数字 {
if((*mem<=3272)&&(*mem>=-3272))//没有满位 {
(*mem)=(*mem)*10+key;
if(id==0)offsetcursor1++;//光标位置偏移量++ else SetLine1Pos(offsetcursor1++); ShowBitNum(key);
} else
{SetLine2Pos(0);ShowStr(\ }
else if(key<14)//按下了+-*/ {
Data[1]=key;
offsetcursor1++; switch(Data[1]) {
case 10:ShowChar('+');break; case 11:ShowChar('-');break; case 12:ShowChar('*');break; case 13:ShowChar('/');break; }
return id;//返回指示显示data[id] }
else if(key==14)//等号 {
if(Data[1]==10) Data[3]=Data[0]+Data[2];//+
else if(Data[1]==11) Data[3]=Data[0]-Data[2];//-
else if(Data[1]==12) Data[3]=Data[0]*Data[2];//*
else if(Data[1]==13) {
if(Data[2]==0) {
return 5;//除零错误 } else {
Data[3]=Data[0]/Data[2];///倍数 Data[4]=Data[0]-Data[2]*Data[3]; } }
else continue;//防止用户开机按=号,未初始化data[3]等
if(Data[3]>9999||Data[3]<-999) return 4;//溢出错误 return 3;//返回显示结果 }
else if(key==15)//开关键 初始化程序
} } }
return 7;
4-4程序显示功能设计。
LM016L显示器需要初始化,写端口等操作。 void WaitCheck() // 等待空闲 {
do{
P0=0xFF;
RS=0;//选择指令寄存器
RW=1;//读 rs rw 值为01时,忙标志和地址计数器读出 EN=0;//E=0,禁止读写
Delay(1);//等待,液晶显示器处理数据 EN=1;//E=1,允许读写
}while(BUSY==1);//判断是否为空闲,1为忙,0为空闲 }
void WriteCom(uchar com)//写指令 {
P0=com; RS=0; RW=0; EN=0;
WaitCheck(); EN=1; }
然后需要进行初始化 void Init() //初始化 {
EN=1; //使能信号为高电平 WriteCom(0x38); //显示模式设置
WriteCom(0x0e); //显示开,光标开,不闪烁 WriteCom(0x06); //光标右移 文字移动无效 WriteCom(0x80); //设置访问地址 }
初始化完成后我写了几个基本的命令,用来扩充对LCD屏幕更容易的显示。 //设置命令
void SetLine1Pos(uchar pos)//设置光标位置 {
WriteCom(0x80|pos); }
void SetLine2Pos(uchar pos)//设置光标位置
{
WriteCom(0xC0|pos); }
void SetCursorStyle(uchar style)//0光标左移1光标右移 {
if(style)WriteCom(0x04);//光标左移 else WriteCom(0x06);//光标右移 }
//运算命令
uint Abs(int number) {
if(number<0)return -number; return number; }
//图像命令
void Cls()//清屏光标复位指令 {
WriteCom(0x01); }
void ShowCursor(uchar i)//1显示不闪烁的光标 0禁用光标 {
if(i)WriteCom(0x14); else WriteCom(0x12); }
void ShowStr(uchar *c) {
while((*c)!=0) {
ShowChar(*c); c++; } }
void ShowError(uchar a)//显示错误命令 a为错误代码 {
SetLine1Pos(0);
ShowStr(\ SetLine2Pos(0);
if(a==4)ShowStr(\
else if(a==5)ShowStr(\ else if(a==6)ShowStr(\}
void ShowBitNum(uchar num)//显示单个正数 {
ShowChar(0x30+num); }
int ShowNumber(int number)//显示指定数字//返回0正常 1表示溢出 {
uchar minusflag=0;//1为负数 uint bitnum,bitbuf;
if(number>32767||number<-32767) {
ShowFlag=4;//溢出错误 return 1; }
if(number<0)minusflag=1; number=Abs(number);
if(number>9999) bitnum=10000; else if(number>999) bitnum=1000; else if(number>99) bitnum=100; else if(number>9) bitnum=10; else if(number>=0) bitnum=1; // SetCursorStyle(1);
if(minusflag)ShowChar(0x2d);//显示负号 while(bitnum>0) {
bitbuf=number/bitnum; ShowBitNum(bitbuf);
number-=(bitbuf*bitnum); bitnum/=10; } }
void ShowFormula()//显示公式命令,用来显示公式 {
SetLine1Pos(0);
ShowNumber(Data[0]); switch(Data[1]) {
case 10:ShowChar('+');break; case 11:ShowChar('-');break; case 12:ShowChar('*');break; case 13:ShowChar('/');break; }
ShowNumber(Data[2]); ShowChar('='); SetLine2Pos(0);
ShowStr(\ ShowNumber(Data[3]);
}
if((Data[1]==13)&&(Data[4]!=0)) {
ShowStr(\
ShowNumber(Data[4]); }
4.4主程序设计
下面为主程序
主程序既把各个功能串联一起,又能够进行循环执行。
首先进行LCD的初始化,再进行欢迎词,在进行键盘扫描,根据ShowFlag变量的值进行显示错误提示或者显示结果或者显示数值等。
void main() {
Init();
while(Welcome(10)); while(1) {
if(KeyPosScan()==12) {
DataInit();
if(ShowFlag<3)ShowFlag=InputChar(&Data[0],0);//勿影响显示
if(ShowFlag<3)ShowFlag=InputChar(&Data[2],2);//结果和错误
}
RegisterShowFlag(); } }
还有部分代码未贴出,整体程序清单见附录。
五、调试及分析 1调试分析
做好器件后先不要把芯片插在芯片板上,先验证电源是否好用,有无短路等情况,接上低电源测试各个点无误后方可插上芯片。
芯片插好后进行测试各个硬件模块是否能够完成功能,包括按键是否好用,显示是否正常等。
2性能分析
(1)单片机程序设计由于使用的是KeilC51。为扩大运算范围,使用long int范围。如果数据溢出,自动提示溢出错误信息。
(2)可运算加、减、乘、除在内的四种运算。包括显示正数与负数。除零错误将自动提示等信息。
(3)可以显示运算的公式。
六、心得体会
通过本次课程设计我真正的完成了自己设计计算器的目标,了解了从设计硬件,电路设计,电路板设计,软件设计,成品调试等各方面的过程,从而从整体学到了多方面的知识,为以后工作打下了一定的基本基础。
另外从本次实验中我也发现了自己有很多的不足,对知识了解的可能仍不够扎实,做事不够稳定等。相信同样的问题以后能够很好的解决,并能够把单片机做的更好。
七、参考文献
[1]李群芳,黄建;单片机微型计算机与技术 北京:电子工业出版社,2001
八、附录
整体电路图
程序源代码
#include
#define uint unsigned int #define uchar unsigned char
sbit EN = P2^2; //定义引脚 sbit RS = P2^0; sbit RW = P2^1; sbit BUSY = P0^7; sbit P13 = P1^3; //键盘数据
uchar LineScan[4]={0xE0,0xD0,0xB0,0x70};//列线扫描电压,分为第1,2,3,4根列线 uchar RowScan[4] ={0x0E,0x0D,0x0B,0x07};//行线扫描电压,分为第1,2,3,4根行线 //计算类定义
uchar ShowFlag=9;//0显示Data[0] 1正常允许进行下一步 2显示Data[2] 3显示Data[3] 4显示溢出错误 5显示除零错误 6显示作者错误 7初始化程序 8操作错误 9提示按初始化
键 99无法预测错误
uchar DivFloatFlag=0;//是否显示除法所得的float数据//该变量设置取消 uchar DivFloatData[15]={0}; uchar FloatShowNum=0;
long int Data[4]={0,10,0,0};//记录运算数据及结果 //系统端口操作函数 void Delay(uint o) { uint i,j; for(i = 0; i < o; i++)for(j = 0; j < 100; j++); }
void WaitCheck() // 等待空闲 {
do{
P0=0xFF;
RS=0;//选择指令寄存器
RW=1;//读 rs rw 值为01时,忙标志和地址计数器读出 EN=0;//E=0,禁止读写
Delay(1);//等待,液晶显示器处理数据 EN=1;//E=1,允许读写
}while(BUSY==1);//判断是否为空闲,1为忙,0为空闲 }
void WriteCom(uchar com)//给P0写指令 { P0=com; RS=0; RW=0; EN=0; WaitCheck(); EN=1; }
void ShowChar(uchar c)//输入16进制数字码显示char { P0=c; RS=1; RW=0; EN=0; WaitCheck(); EN=1; }
//设置命令
void SetLine1Pos(uchar pos)//设置光标位置 {
WriteCom(0x80|pos); }
void SetLine2Pos(uchar pos)//设置光标位置 { WriteCom(0xC0|pos); }
void SetCursorStyle(uchar style)//0光标左移1光标右移 { if(style)WriteCom(0x04);//光标左移 else WriteCom(0x06);//光标右移 }
//运算命令
long int Abs(long int number) { if(number<0)return -number; return number; }
//图像命令
void Cls()//清屏光标复位指令 { WriteCom(0x01); }
void ShowCursor(uchar i)//1显示不闪烁的光标 0禁用光标 { if(i)WriteCom(0x14); else WriteCom(0x12); }
void ShowStr(uchar *c) { while((*c)!=0) { ShowChar(*c); c++; } }
void ShowBitNum(uchar num)//显示单个正数 { ShowChar(0x30+num); }
void ShowError(uchar a) { SetLine1Pos(0); ShowStr(\ id=\ SetLine2Pos(0);
if(a==4)ShowStr(\ else if(a==5)ShowStr(\ else if(a==6)ShowStr(\ AuthorError! \ else if(a==8)ShowStr(\ else ShowStr(\}
int ShowNumber(long int number)//显示指定数字//返回0正常 1表示溢出 { uchar minusflag=0,idnumbuf[10]={0};//1为负数,最大10位整数 int bitbuf; if(number>2147483647||number<-2147483647) { ShowFlag=4;//溢出错误 return 1; } if(number<0)minusflag=1; else if(number==0){ShowChar('0');return 0;} number=Abs(number); if(minusflag)ShowChar(0x2d);//显示负号 //显示正数 //10位赋值 for(bitbuf=0;number;bitbuf++) { idnumbuf[bitbuf]=number; number/=10; } for(bitbuf--;bitbuf>=0;bitbuf--) { ShowBitNum(idnumbuf[bitbuf]); } return 0; }
void ShowFormula() { SetLine1Pos(0); ShowNumber(Data[0]); switch(Data[1]) { case 10:ShowChar('+');break; case 11:ShowChar('-');break; case 12:ShowChar('*');break; case 13:ShowChar('/');break;
} ShowNumber(Data[2]); ShowChar('='); SetLine2Pos(0); ShowNumber(Data[3]); if(Data[1]==13) { ShowChar('.'); for(FloatShowNum=0;FloatShowNum<15;++FloatShowNum) { ShowBitNum(DivFloatData[FloatShowNum]); } } ShowStr(\ \}
//按键处理命令
//获取按键位置//16为无按键按下 uchar KeyPosRowScan() { uchar Temp=0;//扫描状态暂存。 uchar Row;//行号 P3=0x0f; Temp=P3;//暂存P2状态 for(Row=0;Row<4;Row++) if(Temp!=0x0f)//若有按键按下 { if(RowScan[Row]==Temp)return Row; } return 4;//无按键按下 }
uchar KeyPosLineScan() { uchar Temp=0;//扫描状态暂存。 uchar Line;//列号。 P3=0xf0; Temp=P3;//暂存P2状态 for(Line=0;Line<4;Line++) if(Temp!=0xf0)//若可能有按键按下 { if(LineScan[Line]==Temp)return Line; } return 4;//无按键按下 }
uchar KeyPosScan()//返回按键位置 { return KeyPosRowScan()*4+KeyPosLineScan(); }
//返回指定位置按键的键值
uchar GetPosKeyID(uchar keypos) { switch(keypos) { case 13: return 0; // 0 case 8: return 1; // 1 case 9: return 2; // 2 case 10: return 3; // 3 case 4: return 4; // 4 case 5: return 5; // 5 case 6: return 6; // 6 case 0: return 7; // 7 case 1: return 8; // 8 case 2: return 9; // 9 case 15: return 10; // + case 11: return 11; // - case 7: return 12; // * case 3: return 13; // / case 14: return 14; // = case 12: return 15; // On\\C case 20: return 16; // 无按键 default: return 17; // 奇怪的事情 } }
//功能部分
uchar InputChar(uchar id)//返回值赋给showflag { uchar key,DivFBuf,offsetcursor1,keynumbernum=0;//被除数DivFBuf作为缓冲 long int nbuf=0; if(id==0){offsetcursor1=0;Data[4]=0;} while(1) { if(KeyPosScan()!=20) { Delay(15);//防抖动 key=GetPosKeyID(KeyPosScan()); if(key<10)//按下了数字 { if((keynumbernum==0)&&(key==0));
else { ++keynumbernum; if(keynumbernum<10)//没有满位 { nbuf=nbuf*10+key; if(id==0)offsetcursor1++;//光标位置偏移量++ else SetLine1Pos(offsetcursor1++); ShowBitNum(key); } else { SetLine2Pos(0); ShowStr(\ } } }
else if(key<14)//按下了+-*/ { Data[id]=nbuf; Data[1]=key; SetLine1Pos(offsetcursor1++); switch(Data[1]) { case 10:ShowChar('+');break; case 11:ShowChar('-');break; case 12:ShowChar('*');break; case 13:ShowChar('/');break; } if(id==0) return 1;//返回指示显示data[id] else return 8; }
else if(key==14)//等号 { Data[id]=nbuf; if(id==2) ShowChar('='); else { SetLine2Pos(0); ShowStr(\ ShowNumber(Data[0]);
return id; } // if(Data[0]==0){while(1)ShowStr(\ if(Data[1]==10) Data[3]=Data[0]+Data[2];//+ else if(Data[1]==11) Data[3]=Data[0]-Data[2];//- else if(Data[1]==12) Data[3]=Data[0]*Data[2];//* else if(Data[1]==13) { if(Data[2]==0) { return 5;//除零错误 } else { Data[3]=Data[0]/Data[2];//整数部分 if(Data[3]*Data[2]!=Data[0]) { DivFloatFlag=1; } DivFloatData[FloatShowNum]=Data[3]; DivFBuf=Data[0]; for(FloatShowNum=0;FloatShowNum<15;FloatShowNum++) { DivFloatData[FloatShowNum]=DivFBuf-DivFloatData[FloatShowNum]*Data[2]; DivFBuf=DivFloatData[FloatShowNum]*10; DivFloatData[FloatShowNum]=DivFBuf/Data[2]; DivFloatData[FloatShowNum+1]=DivFloatData[FloatShowNum]; } } } // else continue;//防止用户开机按=号,未初始化data[3]等 if(Data[3]>2147483647||Data[3]<-2147483647) return 4;//溢出错误 return 3;//返回显示结果 } else if(key==15)//开关键 初始化程序 return 7; } } }
void DataInit() {
uchar i; for(i=0;i<4;i++)Data[i]=0;Data[1]=10; for(i=0;i<15;i++)DivFloatData[i]=0; FloatShowNum=0; ShowFlag=1; DivFloatFlag=0; Cls(); }
void RegisterShowFlag() { if(ShowFlag==0) {SetLine1Pos(0);ShowNumber(Data[0]);}//见ShowFlag注释 else if(ShowFlag==1); else if(ShowFlag==2) {SetLine1Pos(0);ShowNumber(Data[2]);} else if(ShowFlag==3) {ShowFormula();} else if(ShowFlag==4)ShowError(4); else if(ShowFlag==5)ShowError(5); else if(ShowFlag==6)ShowError(6); else if(ShowFlag==7)DataInit(); else if(ShowFlag==8)ShowError(8); else if(ShowFlag==9) { SetLine1Pos(0); ShowStr(\ SetLine2Pos(0); ShowStr(\ } else ShowError(99); } //
void Init() //初始化 { EN=1; //使能信号为高电平 WriteCom(0x38); //显示模式设置
WriteCom(0x0e); //显示开,光标开,不闪烁 WriteCom(0x06); //光标右移 文字移动无效 WriteCom(0x80); //设置访问地址 }
uchar Delay2(uint o) { uint i,j; for(i = 0; i < o; i++)for(j = 0; j < 100; j++)
{if(KeyPosLineScan()!=4)return 0;} return 1; }
uchar Welcome(uchar i)//娱乐模式 { SetLine1Pos(0); ShowStr(\ 10807010325\ if(!Delay2(i))return 0; SetLine2Pos(0); ShowStr(\ if(!Delay2(i))return 0; return 1; }
void main() { Init(); while(Welcome(10));Cls(); while(1) { if(KeyPosScan()==12) { DataInit(); if(ShowFlag==1)ShowFlag=InputChar(0);//不要影响显示结果和错误 if(ShowFlag==1)ShowFlag=InputChar(2);//不要影响显示结果和错误 } RegisterShowFlag(); } }
正在阅读:
单片机计算器(重理工大二课程设计)计算范围-4294967295至+429404-08
XX小学创建文明校园说明报告04-18
阅读的好处作文400字06-17
用Word三步制作精美名片05-11
吉林省延边州安图县2022-2022学年八年级上地理期末考试题04-09
(北师大版)九年级上册《4.4探索三角形相似的条件(3)》教案04-07
小乌龟作文550字07-13
人教PEP六年级英语下册第一二单元测试题(含答案)10-30
梯形屋架课程设计05-20
放射工作人员培训试题10-21
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 单片机
- 大二
- 计算器
- 4294967295
- 理工
- 范围
- 课程
- 计算
- 设计
- 4294
- Internet Changes the Life 互联网改变生活
- pmp47个过程组和各个过程的输入输出及常用缩写 - 图文
- 广告牌施工方案
- 2018全国各地中考物理试题《电功率》试题汇编
- 千字文教案
- 先秦诸子选读翻译检测卷
- 作业规程、安全技术措施管理制度
- 机械原理课程设计 牛头刨床凸轮机构
- 抢抓机遇 加快发展 促进农业产业化龙头企业做大做强
- 听李迪老师讲课心得体会
- 工程分包管理及措施
- 宏观经济学第二讲简单国民收入的决定习题
- ADCP在黄河口近海海洋水文观测中的应用
- 个人所得税
- 2015年全国爱牙日宣传活动计划及宣传画
- 电厂汽轮机单阀顺序阀切换的实现
- 河北省学业水平考试信息技术试题2010.11月考题 - 图文
- 电影《孔子》观后感1000字 - 原创
- 许昌市郊董庄小学学校三年发展规划1
- 化工原理练习题