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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2454|回復: 4
打印 上一主題 下一主題
收起左側

功能電子表單片機程序(不用時鐘芯片)

[復制鏈接]
跳轉到指定樓層
樓主
ID:596979 發表于 2019-8-7 16:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "reg52.h"
#include "matrix_key.h"        
#define keynumber P1
typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;
extern unsigned char key_backvalue;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit led1=P2^0;
sbit led7=P2^6;
sbit out_break=P3^3;
unsigned char sec=45,min=59,hour=23;
unsigned char qq,ww;
char num=0;
u8 DisplayData[8];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
bit set=0,set_hour=0,set_min=0,hour_unit=0,min_unit=0,limit=0,min_flag1=0,min_flag2=0,hour_flag1=0,hour_flag2=0;
/*******************************************************************************
* 函 數 名         : delay
* 函數功能                   : 延時函數,i=1時,大約延時10us
*******************************************************************************/
extern void delay(u16 i)
{
        while(i--);        
}


void backspace()                        //退格
{
if(min_flag1&&min_flag2)
{
min_unit=1;set_min=0;min_flag2=0;
}
if(min_flag1&&min_flag2==0)
{
min_unit=0;set_min=1;
}
//
if(hour_flag1&&hour_flag2)
{
hour_unit=1;set_hour=0;hour_flag2=0;
}
if(hour_flag1&&hour_flag2==0)
{
hour_unit=0;set_hour=1;
}
}

        
void Timer0Init()
{
        TMOD|=0X11;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
                 TH1=0XFC;        //給定時器賦初值,定時1ms
        TL1=0X18;        
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器        
        TH0=0XFC;        //給定時器賦初值,定時1ms
        TL0=0X18;        
        ET0=1;//打開定時器0中斷允許
        EA=1;//打開總中斷
        TR0=1;//打開定時器                        
}
void datapros()         
{
        DisplayData[0] = smgduan[hour/10];                                //時
        DisplayData[1] = smgduan[hour%10];                                 
        DisplayData[2] = 0x40;
        DisplayData[3] = smgduan[min/10];                                //分
        DisplayData[4] = smgduan[min%10];        
        DisplayData[5] = 0x40;
        DisplayData[6] = smgduan[sec/10];                                //秒
        DisplayData[7] = smgduan[sec%10];
}


void main()
{
Timer0Init();
PT0=1;
PX1=0;
while(1)
{
scan();
if(key_backvalue==31)
{
qq=hour;
ww=min;
set=1;
TR1=0;
}
if(set)                         //設置
{
scan();
switch(key_backvalue)
{
case(11):led1=0;key_backvalue=0x00; set_hour=1;min_unit=0;break;
case(14):led1=0;key_backvalue=0x00; set_min=1;hour_unit=0; break;
case(23):TR1=1;led1=1;min_flag1=0;min_flag2=0;hour_unit=0;min_unit=0;set_hour=0;set_min=0;break;
case(17):        hour=qq;min=ww;TR1=1;led1=1;min_flag1=1;min_flag2=0;hour_unit=0;min_unit=0;set_hour=0;set_min=0;break;
}
if(set_hour)                   //設置時
{
scan();
switch(key_backvalue)
{
case(1): key_backvalue=0x00;hour=(10+hour%10);hour_unit=1;set_hour=0;limit=1;hour_flag1=1;break;
case(2): key_backvalue=0x00;hour=(20+hour%10);hour_unit=1;set_hour=0;hour_flag1=1;break;
case(22):key_backvalue=0x00;hour=hour%10;     hour_unit=1;set_hour=0;limit=1;hour_flag1=1;break;
}
}
if(hour_unit&&(limit==0))
{
scan();
switch(key_backvalue)
{
case(22):key_backvalue=0x00;   hour=hour/10*10;hour_flag2=1;break;
case(1):key_backvalue=0x00;    hour=(hour/10*10+1);hour_flag2=1;break;
case(2):key_backvalue=0x00;        hour=(hour/10*10+2);hour_flag2=1;break;
case(3):key_backvalue=0x00;        hour=(hour/10*10+3);hour_flag2=1;break;
case(4):key_backvalue=0x00;        hour=(hour/10*10+4);hour_flag2=1;break;
}
scan();
if(key_backvalue==21)
{
backspace();
}
}
if(hour_unit&&limit)
{
scan();
switch(key_backvalue)
{
  case(22):key_backvalue=0x00;   hour=hour/10*10;hour_unit=0;limit=0;hour_flag2=1;break;
case(1):key_backvalue=0x00;    hour=(hour/10*10+1);limit=0;hour_flag2=1;break;
case(2):key_backvalue=0x00;        hour=(hour/10*10+2);limit=0;hour_flag2=1;break;
case(3):key_backvalue=0x00;        hour=(hour/10*10+3);limit=0;hour_flag2=1;break;
case(4):key_backvalue=0x00;        hour=(hour/10*10+4);limit=0;hour_flag2=1;break;
case(5):key_backvalue=0x00;        hour=(hour/10*10+5);limit=0;hour_flag2=1;break;
case(6):key_backvalue=0x00;        hour=(hour/10*10+6);limit=0;hour_flag2=1;break;
case(7):key_backvalue=0x00;        hour=(hour/10*10+7);limit=0;hour_flag2=1;break;
case(8):key_backvalue=0x00;        hour=(hour/10*10+8);limit=0;hour_flag2=1;break;
case(9):key_backvalue=0x00;        hour=(hour/10*10+9);limit=0;hour_flag2=1;break;
}
scan();
if(key_backvalue==21)
{
backspace();
}
}
if(set_min==1)                        //設置分
{
scan();
switch(key_backvalue)
{
case(22):key_backvalue=0x00;min=min%10;min_unit=1;set_min=0;break;
case(1):key_backvalue=0x00; min=(min%10+10);min_unit=1;set_min=0;min_flag1=1;break;
case(2):key_backvalue=0x00; min=(min%10+20);min_unit=1;set_min=0;min_flag1=1;break;
case(3):key_backvalue=0x00; min=(min%10+30);min_unit=1;set_min=0;min_flag1=1;break;
case(4):key_backvalue=0x00; min=(min%10+40);min_unit=1;set_min=0;min_flag1=1;break;
case(5):key_backvalue=0x00; min=(min%10+50);min_unit=1;set_min=0;min_flag1=1;break;
}
scan();
if(key_backvalue==21)
{
backspace();
}
}
if(min_unit)
{
scan();
switch(key_backvalue)
{
case(22):key_backvalue=0x00; min=min/10*10;min_flag2=1;break;
case(1):key_backvalue=0x00;  min=(min/10*10+1);min_flag2=1;break;
case(2):key_backvalue=0x00;         min=(min/10*10+2);min_flag2=1;break;
case(3):key_backvalue=0x00;         min=(min/10*10+3);min_flag2=1;break;
case(4):key_backvalue=0x00;         min=(min/10*10+4);min_flag2=1;break;
case(5):key_backvalue=0x00;         min=(min/10*10+5);min_flag2=1;break;
case(6):key_backvalue=0x00;         min=(min/10*10+6);min_flag2=1;break;
case(7):key_backvalue=0x00;         min=(min/10*10+7);min_flag2=1;break;
case(8):key_backvalue=0x00;         min=(min/10*10+8);min_flag2=1;break;
case(9):key_backvalue=0x00;         min=(min/10*10+9);min_flag2=1;break;
}
}
scan();
if(key_backvalue==21)
{
backspace();
}
}
}
}


void Timer0() interrupt 3
{
        static u16 i;
        unsigned char o=0;
        TH1=0XFC;        //給定時器賦初值,定時1ms
        TL1=0X18;
        i++;
        if(i==1000)
        {
        i=0;
        sec++;
        if(sec>59)
        {
        sec=0;min++;
        if(min>59)
        {
        min=0;hour++;
         if(hour>23)
         {
         hour=0;
         }
        }
        }               
        }
        }        


void DigDisplay()interrupt 1
{
     u8 i;
         static u16 o;
        TH0=0XFC;        //給定時器賦初值,定時1ms
        TL0=0X18;
        o++;
        if(o==15)
        {
        datapros();
        for(i=0;i<8;i++)
        {
        if(set_hour&&i==7)continue;
        if(hour_unit&&i==6)continue;
        if(set_min&&i==4)continue;
        if(min_unit&&i==3)continue;
                switch(i)         //位選,選擇點亮的數碼管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//顯示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//顯示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//顯示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//顯示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//顯示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//顯示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//顯示第7位        
                }
               
                P0=DisplayData[7-i];//發送數據
                delay(100); //間隔一段時間掃描        
                P0=0x00;//消隱
        }
        }
         if(o==30)
         {
         o=0;
                for(i=0;i<8;i++)
        {
                switch(i)         //位選,選擇點亮的數碼管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//顯示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//顯示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//顯示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//顯示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//顯示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//顯示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//顯示第7位        
                }
               
                P0=DisplayData[7-i];//發送數據
                delay(100); //間隔一段時間掃描        
                P0=0x00;//消隱
        }
        }               
}



#include"matrix_key.h"
unsigned char key_backvalue;


        void scan()
{
    unsigned int k=0;
        keynumber=0x0f;
        if(keynumber!=0x0f)
        {
        delay(1000);
        keynumber=0x0f;
        switch(keynumber)
        {
        case(0x07):key_backvalue=1;break;
        case(0x0b):key_backvalue=2;break;
        case(0x0d):key_backvalue=3;break;
        case(0x0e):key_backvalue=11;break;
        }
        keynumber=0xf0;
        switch(keynumber)
        {
        case(0x70):key_backvalue=key_backvalue;break;
        case(0xb0):key_backvalue=key_backvalue+3;break;
        case(0xd0):key_backvalue=key_backvalue+6;break;
        case(0xe0):key_backvalue=key_backvalue+20;break;
        }
        }
  while((k<50)&&(keynumber!=0xf0))
  {
   delay(200);
   k++;
  }
}




#ifndef __matrix_key_H_
#define __matrix_key_H_

#include<reg52.h>
#define keynumber P1
void delay(unsigned int i);
extern void scan();
#endif


純手打,實現電子表的一般功能

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:596979 發表于 2019-8-7 17:42 | 只看該作者
用的普中的51開發板,按鍵左上角九個鍵是123456789,右邊從上到下的功能依次是調整時,調整分,取消調整(恢復調整前的時間),開始設置。最后一行的功能分別是確認調整,數字0,無意義。制作不易,,
回復

使用道具 舉報

板凳
ID:61950 發表于 2019-9-1 08:26 | 只看該作者
沒有matrix_key.h頭文件
回復

使用道具 舉報

地板
ID:298008 發表于 2022-5-7 08:07 | 只看該作者
有意思,看看先
回復

使用道具 舉報

5#
ID:472504 發表于 2022-5-16 09:11 | 只看該作者
這種沒有流程圖,沒有函數,變量功能注釋的代碼看著累死。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜影院 | 国产精品欧美精品 | 日本电影网站 | 亚洲成人一二区 | 亚洲成人自拍网 | 在线观看国产wwwa级羞羞视频 | 国产亚洲第一页 | 华人黄网站大全 | 黄色在线观看网址 | 成人一级片在线观看 | 久久成人av电影 | 中文二区| 婷婷色国产偷v国产偷v小说 | 91久久综合亚洲鲁鲁五月天 | 欧美激情亚洲激情 | 日韩精品999 | 99精品国产一区二区三区 | 成人免费视频网站在线观看 | 日韩国产中文字幕 | 91免费小视频 | 久久综合成人精品亚洲另类欧美 | 狠狠久久 | 国产精品日日摸夜夜添夜夜av | 国产亚洲精品精品国产亚洲综合 | 狠狠干网站 | 一区二区三区国产 | 亚洲精品一区二区三区蜜桃久 | 日韩美女一区二区三区在线观看 | 成人黄色电影在线观看 | 九九久视频 | 免费黄色在线 | 久久国产精品一区二区三区 | 韩国成人在线视频 | 91在线一区二区三区 | 亚洲欧美视频 | 久久久精品网 | 天天插天天操 | 国产精品久久国产精品 | 中文字幕一区二区三区乱码图片 | av中文字幕在线观看 | 亚洲视频区 |