程序设计:
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^6; //蜂鸣器驱动线
unsigned char code disp_code[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//数码管显示
uchar key; //键盘值
uchar num; //扫描位数
int temp1=0; //结果整数部分
uint temp2=0; //结果余数部分
int m=0; //
uchar ss[8]; //
uchar flag; //运算标志位
bit c_flag=0; //辅助标志位
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 }; //键盘编码
unsigned char code num_code[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //显示位数
/**********************************************************
延时子函数
**********************************************************/
void delayms(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
/**********************************************************
x*0.14MS 延时子函数
**********************************************************/
void delay0(uchar x)
{
uchar i;
while(x--)
{
for (i = 0; i<13; i++);
}
}
/**********************************************************
蜂鸣器驱动子函数
**********************************************************/
void beep()
{
uchar i;
for (i=0;i<180;i++)
{
delay0(5);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
delayms(250); //延时
}
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(10); //延时30ms
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key);
}
}
}
}
else P1=0xff;
return (16);
}
/*****************************************************
显示数据子程序
********************************************************/
void display(int xx,uint yy)
{ uchar tt=0;
uint x1;
uint y1=yy;
while(yy!=0) //显示余数
{ss[tt]=yy%10;
yy=yy/10;
tt++ ;
num=tt;
}
if(y1!=0) //显示——
{ss[tt]=16;
tt++;
ss[tt]=16;
tt++;
}
x1=abs(xx); //显示整数
while(x1!=0)
{ss[tt]=x1%10;
x1=x1/10;
tt++ ;
num=tt;
}
if(xx<0) //显示符号
{ ss[tt]=16;
tt++;
num=tt;}
for(tt=0;tt { P0=disp_code[ss[tt]]; delayms(5); if(P2==num_code[num-1]) P2= 0x7f; else P2=_cror_(P2,1); } } /********************************************************** 判键是否按下子函数 **********************************************************/ void keydown() { uchar tt=0; P1=0xf0; if((P1&0xf0)!=0xf0) { keyscan(); beep(); if(key>9&&c_flag==0) {switch(key) {case 10:flag=1;temp1=m;c_flag=1;m=0;break; case 11:flag=2;temp1=m;c_flag=1;m=0;break; case 12:flag=3;temp1=m;c_flag=1;m=0;break; case 13:flag=4;temp1=m;c_flag=1;m=0;break; case 14:m=-m;break; case 15:break; } } if(key==14&&c_flag==1) m=-m; if(key<=9) {if(m>=0) m=m*10+key; if(m<0) m=m*10-key; } if(key<=9&&flag==5) { flag=0; c_flag=0; temp1=temp2=0; } } if(key==15) {switch(flag) {case 1:temp1=temp1+m;break; case 2:temp1=temp1-m;break; case 3:temp1=temp1*m;break; case 4:temp2=abs(temp1)%m;temp1=temp1/m;break; default:; } flag=5; m=0; } } void main() { P0 = 0xc0; P2 = 0x7f; //数码管显示"0" P1 = 0xff; while(1) { keydown(); if(flag==5) display(temp1,temp2); else display(m,0); } } 实物照片:
上一篇:【C51】源码 1 -- LED 脉冲宽度调制(PWM)调光
下一篇:DA转换-15~15v电压源设计
推荐阅读最新更新时间:2024-03-16 15:12
设计资源 培训 开发板 精华推荐
- 柔灵科技陈涵:将小型、柔性的脑机接口睡眠设备,做到千家万户
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计