蓝桥杯单片机(CT107D)需要准备的一些文件的写法(First Prepare for Lanqiao Cup MCU Competition)

实物图

CT107D.jpg

电路原理图

CT107D原理图.png

所有文件(all files)

x^1=~x; X^0=X;
Can't shift a single PIN, but can shift the entire I/O port;
(不可移位单个PIN,可移位整个I/O口);
Declare variable first, then operate;  //uchar i;  TR0=0;
(先声明变量,后操作);
  • common.h

common.h

#ifndef COMMON_H
#define COMMON_H

#include "stc15f2k60s2.h"
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define seg_tab_none 19
#define bit_tab_none 8

extern uchar disp_val[8];
extern uchar trg,cont,key_val;
extern uchar ds1302_time[8];

extern void Timer0Init(void);
extern void Timer1Init(void);
extern void hc138Init(void);
extern void hc138_none(void);
extern void hc138_led(void);
extern void hc138_drivers(void);
extern void hc138_bit(void);
extern void hc138_seg(void);
extern void ledInit(void);
extern void led_on_N(uchar n);
extern void led_on_all(void);
extern void led_off(void);
extern void relayInit(void);
extern void buzzInit(void);
extern void dispscan(void);
extern void disp_val_none(void);
extern void keyscan(void);
extern uchar ds18b20_get(void);
extern void ds1302Init(void);
extern void ds1302_burst_read(uchar *val);

#endif
  • main.c

main.c

#include "common.h"

void SysInit(void)
{
  buzzInit();
  relayInit();
  ledInit();
  hc138Init();
  ds1302Init();
  Timer0Init();
  Timer1Init();
  ET0=1;    
  ET1=1;
  EA=1;
}

void main(void)
{
  SysInit();
  while(1)
  {
    ;
  }
}
  • timer.c

timer.c

#include "common.h"

void Timer0Init(void)       //1??@11.0592MHz
{
  AUXR &= 0x7F;     //?????12T??
  TMOD &= 0xF0;     //???????
  TL0 = 0x66;       //??????
  TH0 = 0xFC;       //??????
  TF0 = 0;      //??TF0??
  TR0 = 1;      //???0????
}

void Timer1Init(void)       //50??@11.0592MHz
{
  AUXR &= 0xBF;     //?????12T??
  TMOD &= 0x0F;     //???????
  TL1 = 0x00;       //??????
  TH1 = 0x4C;       //??????
  TF1 = 0;      //??TF1??
  TR1 = 1;      //???1????
}

void Timer0_Routine(void) interrupt 1
{
  //1ms
  static uint clock;
    static uchar select,temp;
    TR0=0;
    if(++clock==1000)
  {
    clock=0;
        if(++select==1)
        {
            ds1302_burst_read(ds1302_time);
            disp_val_none();
            disp_val[0]=ds1302_time[0]&0x0f;
            disp_val[1]=ds1302_time[0]>>4&0x0f;
            disp_val[2]=0x11;
            disp_val[3]=ds1302_time[1]&0x0f;
            disp_val[4]=ds1302_time[1]>>4&0x0f;
            disp_val[5]=0x11;
            disp_val[6]=ds1302_time[2]&0x0f;
            disp_val[7]=ds1302_time[2]>>4&0x0f;
        }
        else
        {
            select=0;
            temp=ds18b20_get();
            disp_val_none();
            disp_val[0]=0x0c;
            disp_val[1]=0x12;
            disp_val[2]=temp%10;
            disp_val[3]=temp/10;
        }
    }
    dispscan();
  TR0=1;
}

void Timer1_Routine(void) interrupt 3
{
  //50ms
  TR1=0;
  keyscan();
  if(trg)
  {
    switch(key_val)
    {
      case 1:led_on_all();break;
      case 2:break;
      case 3:break;
      case 4:break;
      case 5:break;
      case 6:led_on_N(0xaa);break;
      case 7:break;
      case 8:break;
      case 9:break;
      case 10:break;
      case 11:led_on_N(0x55);break;
      case 12:break;
      case 13:break;
      case 14:break;
      case 15:break;
      case 16:led_off();break;
      default:break;
    }
  }
  TR1=1;
}
  • hc138.c

hc138.c

#include "common.h"

#define HC138 P2

void hc138Init(void)
{
  HC138&=0x1f;
}

void hc138_none(void)
{
  HC138&=0x1f;
}

void hc138_led(void)
{
  HC138&=0x1f;
  HC138|=0x80;
}

void hc138_drivers(void)
{
  HC138&=0x1f;
  HC138|=0xa0;
}

void hc138_bit(void)
{
  HC138&=0x1f;
  HC138|=0xc0;
}

void hc138_seg(void)
{
  HC138&=0x1f;
  HC138|=0xe0;
}
  • led.c

led.c

#include "common.h"

#define LED P0

void ledInit(void)
{
  hc138_led();
  LED=0xff;
  hc138_none();
}

void led_on_N(uchar n)
{
  hc138_led();
  LED=n;
  hc138_none();
}

void led_on_all(void)
{
  hc138_led();
  LED=0x00;
  hc138_none();
}

void led_off(void)
{
  hc138_led();
  LED=0xff;
  hc138_none();
}
  • drivers.c

drivers.c

#include "common.h"

sbit RELAY_PIN=P0^4;
sbit BUZZ_PIN=P0^6;

void relayInit(void)
{
  hc138_drivers();
  RELAY_PIN=0;
  hc138_none();
}

void buzzInit(void)
{
  hc138_drivers();
  BUZZ_PIN=0;
  hc138_none();
}
  • digital_tube.c

digital_tube.c

#include "common.h"

#define BIT P0
#define SEG P0

code uchar seg_tab[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
                        0x88,0x83,0xc6,0xa1,0x86,0x8e,
                        0x7f,0xbf,0x9c,0xff};  //0~9,A~F,.,-,o,blank
code uchar bit_tab[9]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};
uchar disp_val[8]={seg_tab_none,seg_tab_none,seg_tab_none,seg_tab_none,
                   seg_tab_none,seg_tab_none,seg_tab_none,seg_tab_none};

void disp_val_none(void)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        disp_val[i]=seg_tab_none;
    }
}
                                     
void dispscan(void)
{
  static uchar pointer=0;
  SEG=seg_tab[seg_tab_none];
  hc138_seg();
  SEG=seg_tab[disp_val[pointer]];
  hc138_none();
  BIT=bit_tab[bit_tab_none];
  hc138_bit();
  BIT=bit_tab[pointer];
  if(++pointer==8)
  {
    pointer=0;
  }
  hc138_none();
}
  • key.c

key.c

#include "common.h"

#define KEY P3

uchar trg,cont,trg_row,cont_row,trg_column,cont_column,key_val;

void keyscan(void)
{
  uchar readdata=0x00,P42_val=0,P44_val=0;
  KEY=0x0f&0x3f;
  P42=0;
  P44=0;
  P42_val=P42;
  P44_val=P44;
  P42_val=P44_val<<6&0x40;
  P44_val=P44_val<<7&0x80;
  readdata=KEY&0x3f|P42_val|P44_val;
  readdata^=0x0f;
  trg_row=readdata&(readdata^cont_row);
  cont_row=readdata;
  KEY=0xf0&0x3f;
  P42=1;
  P44=1;
  P42_val=P42;
  P44_val=P44;
  P42_val=P42_val<<6&0x40;
  P44_val=P44_val<<7&0x80;
  readdata=KEY&0x3f|P42_val|P44_val;
  readdata^=0xf0;
  trg_column=readdata&(readdata^cont_column);
  cont_column=readdata;
  trg=trg_row|trg_column;
  cont=cont_row|cont_column;
  switch(trg)
  {
  case 0x81:key_val=1;break;
  case 0x82:key_val=2;break;
  case 0x84:key_val=3;break;
  case 0x88:key_val=4;break;
  case 0x41:key_val=5;break;
  case 0x42:key_val=6;break;
  case 0x44:key_val=7;break;
  case 0x48:key_val=8;break;
  case 0x21:key_val=9;break;
  case 0x22:key_val=10;break;
  case 0x24:key_val=11;break;
  case 0x28:key_val=12;break;
  case 0x11:key_val=13;break;
  case 0x12:key_val=14;break;
  case 0x13:key_val=15;break;
  case 0x18:key_val=16;break;
  default:break;
  }
  KEY=0xff;
}
  • ds18b20.c

ds18b20.c

#include "common.h"

sbit DQ=P1^4;

void Delay50us()        //@11.0592MHz
{
    unsigned char i, j;

    _nop_();
    i = 1;
    j = 134;
    do
    {
        while (--j);
    } while (--i);
}

void Delay500us()       //@11.0592MHz
{
    unsigned char i, j;

    _nop_();
    _nop_();
    i = 6;
    j = 93;
    do
    {
        while (--j);
    } while (--i);
}

void ds18b20Init(void)
{
    DQ=0;
    Delay500us();
    DQ=1;
    Delay50us();
    while(~DQ);
}

void write_byte(uchar val)
{
    uchar i=0x00;
    for(i=0x01;i;i<<=1)
    {
        DQ=0;
        DQ=val&i;
        Delay50us();
        Delay50us();
        DQ=1;
    }
}

uchar read_byte()
{
    uchar i=0x00,val=0;
    for(i=0x01;i;i<<=1)
    {
        DQ=0;
        DQ=1;
        if(DQ)val=val|i;
        Delay50us();
        Delay50us();
    }
    return val;
}

uchar ds18b20_get(void)
{
    static uchar temp[2]={0x00,0x00},val;
    ds18b20Init();
    write_byte(0xcc);
    write_byte(0x44);
    ds18b20Init();
    write_byte(0xcc);
    write_byte(0xbe);
    temp[0]=read_byte();
    temp[1]=read_byte();
    val=temp[0]>>4&0x0f|temp[1]<<4&0xf0;
    return val;
}
  • ds1302.c (burst_mode)

ds1302.c

#include "common.h"

sbit CE=P1^3;
sbit SCLK=P1^7;
sbit I_O=P2^3;

uchar ds1302_time[8];
code uchar Inittime[]={0x05,0x20,0x19,0x23,0x02,0x06,0x19};

void ds1302_write_byte(uchar dat)
{
    uchar i=0x00;
    for(i=0x01;i;i<<=1)
    {
        SCLK=0;
        if(dat&i)
        {
            I_O=1;
        }
        else
        {
            I_O=0;
        }
        SCLK=1;
    }
    I_O=1;
}

uchar ds1302_read_byte(void)
{
    uchar i=0x00,val=0x00;
    for(i=0x01;i;i<<=1)
    {
        SCLK=0;
        if(I_O)
        {
            val|=i;
        }
        SCLK=1;
    }
    return val;
}

void ds1302_single_write(uchar reg,uchar dat)
{
    SCLK=0;
    I_O=0;
    CE=1;
    ds1302_write_byte(reg<<1|0x80);
    ds1302_write_byte(dat);
    CE=0;
}

uchar ds1302_single_read(uchar reg)
{
    uchar val;
    SCLK=0;
    I_O=0;
    CE=1;
    ds1302_write_byte(reg<<1|0x81);
    val=ds1302_read_byte();
    CE=0;
    return val;
}

void ds1302_burst_write(uchar *dat)
{
    uchar i=0;
    SCLK=0;
    I_O=0;
    CE=1;
    ds1302_write_byte(0xbe);
    for(i=0;i<8;i++)
    {
        ds1302_write_byte(dat[i]);
    }
    CE=0;
}

void ds1302_burst_read(uchar *val)
{
    uchar i=0;
    SCLK=0;
    I_O=0;
    CE=1;
    ds1302_write_byte(0xbf);
    for(i=0;i<8;i++)
    {
        val[i]=ds1302_read_byte();
    }
    CE=0;
}

void ds1302Init(void)
{
    CE=0;
    SCLK=0;
    if(ds1302_single_read(0)&0x80)
    {
        ds1302_single_write(7,0x00);
        ds1302_burst_write(Inittime);
    }
}


  • [x] common.h
  • [x] main.c
  • [x] timer.c
  • [x] hc138[1].c --->数据手册
  • [x] led.c
  • [x] drivers[2].c
  • [x] digital_tube.c
  • [x] key.c
  • [x] ds18b20[3]
  • [ ] ds1302[4]
  • [ ] IIC
  • [ ] 客观题

  1. 3位译码器

  2. 步进电机,直流电机,继电器,蜂鸣器,功放

  3. 温度传感器

  4. 时钟芯片

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,279评论 0 10
  • 自2013年kindle paperwhite正式进入中国以来,国行版kindle也已经迭代了好几个版本。同时,越...
    效率火箭阅读 1,285评论 2 14
  • 我有病,你有药嘛?我相信这一句话大家已经耳熟能详。病的种类多到数不清,但并非每一种病都有对应的处方达到痊愈的效果...
    DJ云影阅读 360评论 2 2
  • 她喜欢他很久了,只有他不知道。 她承认自己是个颜狗,就是因为脸喜欢上他的。但她似乎也不是那么肤浅,喜欢上他之后,她...
    线球球阅读 233评论 2 0