?? 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 + -