久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2903|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機完整代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:439840 發(fā)表于 2018-12-5 10:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#include <intrins.h>
sbit datacs = P2 ^ 6;
sbit chipcs = P2 ^ 7;
char i = 100;
unsigned char j, k;
sbit row1 = P2 ^ 5;            //行端口定義
sbit row2 = P2 ^ 4;
sbit row3 = P2 ^ 3;
sbit row4 = P2 ^ 2;
sbit col1 = P1 ^ 7;             //列端口定義
sbit col2 = P1 ^ 6;
sbit col3 = P2 ^ 0;
sbit col4 = P2 ^ 1;
long x = 0, y = 0, z = 0; //z=x+y or z=x-y
unsigned char oper;//+-*/
bit flag = 0;
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
                              0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
                             }; //共陰數(shù)碼管顯示段碼0~9
void add()
{
    z = x + y;
}
void sub()
{
    z = x - y;
}
long pw(unsigned char n,unsigned char m)
{
    long x=1;
    while(m--)
    {
        x*=n;
    }
    return x;
}
void display(long num)
{
    unsigned char l = 0x7f;
    unsigned char n = 0;
    unsigned char temp;
    long x = 0;
    /*
    如何判斷數(shù)字位數(shù)?
    */
    if(num == 0)
    {
        n = 1;
    }
    else
    {
        x = num;
        while (x)
        {
            x = x / 10;
            n++;
        }
    }
    for (i = n - 1; i >= 0; i--)
    {
  long p = pw(10, i + 1);
  long q = pw(10 , i);
        temp = num %  p / q;
        P0 = table[temp];
        //P1=0xff;
        datacs = 1;
        datacs = 0;
        P0 = _cror_(l, i);
        chipcs = 1;
        chipcs = 0;
    }
}
void display_num()
{
    if (flag)
    {
        display(z);//當(dāng)摁下了等于號,顯示Z值
    }
    else
    {
        if (!oper)
        {
            display(x);//當(dāng)沒有摁下等于號,也沒摁下運算符,顯示x
        }
        else
        {
            display(y);//當(dāng)沒摁下等于號,但是摁下了運算符,顯示y
        }
    }
}
/*數(shù)碼管顯示函數(shù)*/
/*
例:num = 123
bai = num % 1000 / 100 = 1;
shi = num % 100 / 10 = 2;
ge = num % 10 = 3;
例2:num = 1234;
qian = num % 10000/ 1000 = 1;
bai = num % 1000 / 100 = 2;
shi = num % 100 / 10 = 3;
ge = num % 10 / 1= 4;
例3:num = 12345;
wan = num % 100000/ 10000 = 1;
qian = num % 10000 / 1000 = 2;
bai = num % 1000 / 100 = 3;
shi = num % 100 / 10 = 4;
ge = num % 10 / 1= 5;
*/
void fuzhi(unsigned char num)
{
    //判斷條件是什么呢?
    //是否有操作符,也就是oper是否為0
    //如果oper為0,則沒有摁下操作符,則將值賦給x
    //如果oper不為0,則摁下操作符,將值賦給x
    if (!oper)
    {
        //為什么是x*10+7
        //第一次摁7鍵,x=7
        //第二次摁7鍵,x=77,即7*10+7
        //第三次摁7鍵,x=777,即77*10+7
        x = x * 10 + num;//
    }
    else
    {
        y = y * 10 + num;
    }
    while ((P2 & 0x3c) != 0x3c);
}
/*按鍵掃描函數(shù)*/
void keyScan()
{
    unsigned char temp;
    //P3=0x00;
    col1 = 0; col2 = 1; col3 = 1; col4 = 1;
    temp = P2 & 0x3f;
    if (col1 == 0)
    {
        //假設(shè)第一列有按鍵
        if (temp != 0x3f)
        {
            //沒有按鍵退出這次對第一列鍵盤掃描
            temp = P2 & 0x3C;
            switch (temp)
            {
            case 0x38:
                fuzhi(0);
                break;   //’0’鍵被按下時導(dǎo)通,則對應(yīng)端口變?yōu)榈碗娖?br />             case 0x34:
    fuzhi(1);
                return;
                break;
            case 0x2C:
    fuzhi(4);
                return;
                break;
            case 0x1C:
    fuzhi(7);
                return;
                break;
            }
        }
    }
    col1 = 1; col2 = 0; col3 = 1; col4 = 1;
    temp = P2;
    temp = temp & 0x3f;
    if (col2 == 0)
    {
        if (temp != 0x3f)
        {
            temp = P2 & 0x3C;
            switch (temp)
            {
            case 0x38:
                return;
                break;
            case 0x34:
    fuzhi(2);
                return;
                break;
            case 0x2C:
    fuzhi(5);
                return;
                break;
            case 0x1C:
    fuzhi(8);
                return;
                break;
            }
        }
    }
    col1 = 1; col2 = 1; col3 = 0; col4 = 1;
    temp = P2;
    temp = temp & 0x3f;
    if (temp != 0x3f)
    {
        temp = P2 & 0x3C;
        switch (temp)
        {
        case 0x38:
            
            //為什么用switch?
            //判斷是加號還是減號
            switch (oper)
            {
                case 1:
                    add();
                    return;
                    break;
                case 2:
                    sub();
                    return;
                    break;
                default:
                    return;
                    break;
            }
            break;   //’0’鍵被按下時導(dǎo)通,則對應(yīng)端口變?yōu)榈碗娖?br />         case 0x34:
            fuzhi(3);
            return;
            break;
        case 0x2C:
            fuzhi(6);
            return;
            break;
        case 0x1C:
            fuzhi(9);
            return;
            break;
        }
    }
    col1 = 1; col2 = 1; col3 = 1; col4 = 0;
    temp = P2;
    temp = temp & 0x3f;
    if (temp != 0x3f)
    {
        temp = P2 & 0x3C;
        switch (temp)
        {
        case 0x38:
            oper = 1;//操作符為+
            return;
            break;   //’0’鍵被按下時導(dǎo)通,則對應(yīng)端口變?yōu)榈碗娖?br />         case 0x34:
            oper = 2;
            return;
            break;
        case 0x2C:
   oper = 3;
            return;
            break;
        case 0x1C:
            return;
            break;
        }
    }
}

void main()
{
    datacs = 0;
    chipcs = 0;
// P1=0xff;
    while (1)
    {
        P3 = 0xff;
        keyScan();
        display_num();
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-12-5 18:40 | 只看該作者
補全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩视频在线播放 | 伊人无码高清 | 国产99久久 | 欧美日韩视频在线播放 | 久久久精品久久久 | 日韩视频区 | 粉嫩国产精品一区二区在线观看 | 亚洲一区视频在线 | 91精品国产91久久久久久 | www.亚洲视频.com | 韩日精品一区 | 日日摸日日碰夜夜爽2015电影 | av片毛片| 中文字幕久久精品 | 久久国产成人 | 欧美色综合一区二区三区 | 国产精品1区 | 免费能直接在线观看黄的视频 | 久久99精品久久久久久国产越南 | 精品日韩一区 | 色综合久久天天综合网 | 色又黄又爽网站www久久 | 中文字幕综合 | 亚洲精品乱码久久久久久9色 | 欧美成人a∨高清免费观看 色999日韩 | 99成人 | 青青草华人在线视频 | 亚洲精品一区av在线播放 | 久久国产一区 | 黄色毛片大全 | 国产欧美在线一区 | 国产欧美一区二区三区久久手机版 | 99热在线免费 | 日韩精品一区二区三区免费观看 | 日韩一级| 国产激情 | 欧美日韩高清一区二区三区 | 亚洲精品一区二三区不卡 | 国产一级视屏 | 国产精品免费在线 | 国产男女猛烈无遮掩视频免费网站 |