📄 99koujue.c
字号:
/********************************************************************************
* 描述: 乘法口诀演示 *
* K1--- 模拟出题控制开关, 接p1.4口,数码管数据 p0口,数码管控制p2口 *
* 第6位数码管显示被乘数,第4位数码管显示乘数。 *
* 第1、2位数码管显示乘积。 *
********************************************************************************
* 日期: 2007-3-25 *
* 版本: 3.0 *
* 作者: 深圳学林电子有限公司 专业8051单片机教学站 *
* 邮箱: sxj1974@163.com *
********************************************************************************
* 硬件:此程序在本公司xlisp系列单片机实验仪运行通过 *
********************************************************************************
* 【版权】 Copyright(C)深圳学林电子有限公司 www.51c51.com All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
********************************************************************************/
#include < reg51.h >
#include < intrins.h >
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P1^4;
uchar code display[] = { 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表
uchar data testdata[] = {0x00,0x00,0x0a,0x00,0x0a,0x00};
uchar shift ;
/**********************************************************
延时子程序
**********************************************************/
void delayms(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
/**********************************************************
显示函数
**********************************************************/
void play(void)
{
uchar k;
P0=0xff;
P2=0xff;
shift=0x7f;
for(k=0; k<6; k++)
{
P0=display[testdata[k]];
P2=shift;
shift=_cror_(shift,1);
delayms(1);
}
P2=0xff ; //关闭显示
}
/**********************************************************
随机出题函数
**********************************************************/
void RUBRIC()
{
uchar num1,num2,temp;
TR1=0;
temp=TL1; //取T1当前的计数值
temp=~temp; //取反得到对应的题号
num2=temp/9; //就题目分成9组
num2++; //将组号0~8转换为被乘数1~9
testdata[5]=num2; //保存被乘数
num1=temp%9;
num1++; //将组号0~8转换为乘数1~9。
testdata[3]=num1; //保存乘数
temp=num2*num1; //计算乘积
testdata[1]=temp/10;
testdata[0]=temp%10;
TR1=1;
}
/**********************************************************
主函数
**********************************************************/
main()
{
uchar i;
P0=0xff;
P2=0xff;
TMOD=0x21; //将T1设置为8位自动重装工作方式。
TH1=175; //对T1进行预置。
TL1=175;
TR1=1; //启动T1。
while(1)
{
if(K1==0)
{
for(i=0;i<10;i++) //用显示程序作为键延时
play();
while(K1==0); //等待K1键释放
RUBRIC();
}
play(); //显示数据
}
}
/*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -