资源简介
可以计算9位数的计算器,程序试过了,没有问题,如果你感兴趣就下载吧.希望能帮助大家学习。。。
代码片段和文件信息
#include
//CLK 74HC377 传输锁存
#define CLK P2_0
//DEN 段码允许传输控制引脚
#define DEN P2_1
//WEN 位选允许传输控制引脚
#define WEN P2_2
#define maichong() CLK=0;CLK=1;CLK=1;CLK=0
//功能按键起别名,方便使用
#define F1 10
#define F2 11
#define F3 12
#define F4 13
#define XING 14
#define ZHEN 15
//共阳极数码管码表
unsigned char code mabiao[]=
{
0xc0 /*0*/
0xf9 /*1*/
0xa4 /*2*/
0xb0 /*3*/
0x99 /*4*/
0x92 /*5*/
0x82 /*6*/
0xf8 /*7*/
0x80 /*8*/
0x90 /*9后面没有逗号的 */
}; //不要忘记这个分号
//数码管位选 ~0x80是右边第一个数码管位选,~1是左边数码管位选
unsigned char code weixuan[]={12480x100x200x400x80};
//anjianbiao[]是由原始按键编号通过该表转换获得电路面板的按键编号
unsigned char code anjianbiao[]={123F1456F2789F3XING0ZHENF4};
//shuju[8]是显示缓存区,其中shuju[0]是个位,shuju[1]是十位...
//playindex,在中断里面进行显示一位数码管,playindex是显示序号
unsigned char shuju[8]playindex;
//lx是计算器输入数据的第一个数据,ly是第二个数据ljieguo是计算器运算的结果
unsigned long int lxlyljieguo;
//s是进行减法运算时候正负标志,s=0表示是正,s=1表示是负数
unsigned char s;
void delay(void)
{
int i;
for(i=0;i<500;i++);
}
/////////////////////////////
void t0isr(void) interrupt 1
{
TH0=(65536-5000)/256; //从新给T0赋予初始值,定时时间为5ms
TL0=(65536-5000)%256;
P0=0xff; //灭数码管,由于是共阳数码管,段码=0xff位选=0xff使得数码管灭掉
DEN=0; //允许段码传输
WEN=0; //允许位选传输
maichong(); //在CLK上产生锁存脉冲
WEN=1; //停止位选传输
DEN=1; //停止段码传输
P0=shuju[playindex]; //输出被显示数据的段码
DEN=0; //允许段码传输
maichong(); //在CLK产生锁存脉冲
DEN=1; //停止段码传输
P0=~weixuan[playindex]; //输出被显示数据的位选 ,注意前面的取反符号
WEN=0; //允许位选传输
maichong(); //在CLK产生锁存脉冲
WEN=1; //停止位选传输
playindex++; //调整下一位显示数据位置
if(playindex==8) //如果超出范围,则重复
playindex=0; //利用T0每隔5MS产生中断,每次中断显示一位数据,从而实现延迟
}
/*
//非中断方式实现显示
void play(void)
{
char i;
for(i=0;i<8;i++)
{
P0=0xff;
DEN=0;
WEN=0;
maichong();
WEN=1;
DEN=1;
P0=shuju[i];
DEN=0;
maichong();
DEN=1;
P0=~weixuan[i];
WEN=0;
maichong();
WEN=1;
delay();
}
}
*/
////////////////////////////////
unsigned char getkey(void)
{
unsigned char keyliehangbianhao;
P1=0xf; //行输出1,列输出0
key=P1; //读取行信息
key=key & 0xf; //保留行信息,去掉列信息
if(key==0xf) //如果行信息全部是1,表明没有按键按下,则返回0XFF退出
return 0xff;
delay(); //延迟,然后在读取按键,目的是判断是不是干扰信号
key=P1; //读取按键,注意由于在上面已经行输出1,列输出0,所以这里可以省掉
key=key & 0xf; //保留行信息,去掉列信息
if(key==0xf) //如果行信息全部是1,表明没有按键按下,原来是干扰,返回0XFF退出
return 0xff;
//如果行信息是0000 1110=0xe,表明按键按下在第0行位置
if(key==0xe) //0000 1110
hang=0;
//如果行信息是0000 1101=0xd,表明按键按下在第1行位置
if(key==0xd) //0000 1101
hang=1;
//如果行信息是0000 1011=0xb,表明按键按下在第2行位置
if(key==0xb) //0000 1011
hang=2;
//如果行信息是0000 0111=0x7,表明按键按下在第3行位置
if(key==0x7) //0000 0111
hang=3;
P1=0xf0; //列输出1,行输出0
key=P1; //读取按键
key=key & 0xf0; //保留列信息,去掉行信息
//如果列信息是1110 0000=0xe0,表明按键按下在第0列位置
if(key==0xe0) //1110 0000
lie=0;
//如果列信息是1101 00
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10632 2009-12-19 15:38 af091219_计算器\key_led
文件 145486 2013-08-08 08:36 af091219_计算器\key_led.DSN
文件 4005 2009-12-19 15:38 af091219_计算器\key_led.hex
文件 44 2009-12-19 15:38 af091219_计算器\key_led.lnp
文件 12298 2009-12-19 15:38 af091219_计算器\key_led.M51
文件 1165 2010-04-08 09:20 af091219_计算器\key_led.Opt
文件 0 2010-04-08 09:19 af091219_计算器\key_led.plg
文件 768 2013-08-08 08:37 af091219_计算器\key_led.PWI
文件 1675 2010-04-08 09:20 af091219_计算器\key_led.Uv2
文件 1161 2010-01-28 20:36 af091219_计算器\key_led_Opt.Bak
文件 1679 2010-01-28 20:36 af091219_计算器\key_led_Uv2.Bak
文件 838014 2003-02-27 09:50 af091219_计算器\Last Loaded key_led.DBK
文件 7965 2010-01-28 20:36 af091219_计算器\Text1.c
文件 17569 2010-01-28 20:36 af091219_计算器\Text1.LST
文件 13152 2009-12-19 15:38 af091219_计算器\Text1.OBJ
目录 0 2013-08-08 08:37 af091219_计算器
----------- --------- ---------- ----- ----
1055613 16
相关资源
- 单片机c51设计简易计算器数码管显示
- QT4编写的简单计算器
- 自己写的WINDOWS附件中的科学计算器,
- 基于8255a的计算器
- SPWM脉宽数计算器
- 单片机和LCD1602实现的简易计算器
- 多项式相乘一元稀疏多项式简单计算
- 三国杀武将张昌蒲技能计算器
- Ansoft场计算器
- xcode 简易计算器
-
ob
jective-c的计算器 - fpga vhdl计算器
- linux下的设计QT计算器
- OC 简单计算器(修改版)
- 浮点数转换器,浮点数计算器
- xcode计算器源代码
- MacOS版计算器
- 基于51单片机的计算器Proteus仿真.rar
- 计算器含源码
- sm2/sm3算法验证工具,预运算、大数计
- 计算器类,实现四则运算
- 计算器 实现复数、有理数、矩阵和集
- 安卓开发计算器源代码
- 基于 CLR Windows Forms 的标准型计算器源
- LM2596计算器,用于计算分压电阻
- 51单片机定时器初值计算器
- PID 整定计算器 EXCEL版
- 二阶Stokes波波长计算器
- RC滤波器计算器
- QT初学者手动界面代码实现简单运算的
评论
共有 条评论