(1小时学会C语言51单片机)C语言入门教程


    

    △Victor Hugo 维克雨果相信爱电子朋友单片机词应该会陌生吧朋友听说单片机全称什许太清楚
    更说英文全称简称单片机块集成电路芯片集成台定规模微型计算机简称:单片微型计算机单片机
    (Single Chip Computer)单片机应处见应领域广泛应智仪表实时控制通信家电等方面切没
    什关系(然包括)知道转变成知道转变成精通现想学单片机历详细讲叙
    家听听虾会笑话想:简单东西里卖弄错学历讲述遍已仅仅想
    学单片机找方法者途径朋友提供帮助学程中量少走弯路已
        首先必须学单片机热情说天图书馆午关单片机书明天玩半天天知道书讲什
    东西先说说吧二第学期期末时候开始接触单片机前正面说:知道种芯片单片机
    具体长成什样子点知道里朋友定会忍住发笑嘿嘿千万笑四毕业样知道单片
    机长成什样子呢单片机痴迷更常想象步二期末考试全放弃复室友着书埋头复时候
    捧着图书馆单片机书然懂坚持时想单片机值值样付出
    许三流学校处吧考试挂科明年开学交十元门补考费应该部分横条心坚持
    单片机书资料
        明白单片机回事时候显易见问题出:选择种语言单片机编写程序呢?问题困扰久具
    体选择C51A51呢?汇编二前没开课然着家讲解容易明白单片机时刻具体工作情况合
    书者资料什知道根说写程序终决定学C51毕竟C51课讲C语言类似
    编程思想说相通C51更优点编写程序时优越性更言喻然时没想深远C51特
    点实践程中渐渐体会朋友果选择C51请继续果选择A51面讲
    全C方面完全浪费时间    呵呵 ^_^
        第二然想学单片机必须舍花钱果买芯片回动手焊焊拆拆(期会介绍家硬件
    仿真软件需实验板仿真器直接PC完成软件毕竟软件某特定意义说代硬件)
    天捧着书书翻烂永远学会单片机刚接触单片机朋友资料定会词见较具体概
    念较模糊现作说明:
    (1)编程器 编程器烧单片机芯片HEX者BIN文件烧单片机ROM里供单片机运行
    (2)实验板 实验板专初学者根某求特做板般面单片机系统者需写程序烧芯片放
    面加验证工具实验板初学者说省焊系统麻烦电子开发员说作
    (3)仿真器 仿真器直接HEX者BIN文件暂时放芯片里通芯片引脚连接实验板者系统工作样
    省回插拔芯片带必麻烦
        开始知道面3概念作嘿嘿原想买实验板(想焊板点亮流水灯焊单片机系统)
    结果确想正相反家出售编程器等货物寄知道搞错汗嘿嘿现想想实气笑花
    160样买编程器(幸编程器更烧芯片芯片烧坏)气编程器现躺抽屉里
    呢现想想唯觉欣慰老板次解答问题连种超级幼稚问题嫌麻烦量帮解答点
    感动
        第三想学单片机必需品PC写程序编译者仿真通PC完成果没PC什做PC
    网果没交流单片机遇解决问题直想通估计学单片机热情会着时间
    推移慢慢耗果网通坛者QQ群问题快解决样学效率定高真正高手坛中泡出
        述3条件开始学单片机真做起没说简单定会遇问题
    单片机实现某功知道写某程序懂资料某相似程序写出遇类似情况
    记住:千万急噪行


    (二)

        说相信资料手头应该必备工具吧(忘面讲条件哦)单片机究竟什
    功作呢?先着急接点亮LED(搞电子应该知道LED什吧^_^)
        单片机系统接LED否点亮面次提单片机系统谓单片机系统单片机
    接少外围电路元件单片机工作般须连接晶体VCCGNDRST般情况AT89C5131脚须接高电
    #include      头文件定义#include具体区:者定义更址空间
        Keil安装文件夹中找相应文件较便知
        sbit P1_0 P1 ^ 0    定义脚
        void main (void)
    {
    while(1)
    {
    P1_0 0低电效果LED反接高电效
    }
    }

        简单接单片机P1_0LED点亮然LED低电点亮LED正通电阻接VCC
        P1_0 0 类似C语言中赋值语句 0 赋单片机P1_0引脚输出相应电样达预先求
    while(1)语句单片机工作死循环状态直输出低电果试着点亮LED类似述语句里讲
        点亮LED联想繁华街区流动彩灯LED次序亮呢?答案肯定
    实显示原理简单LED灭立亮次轮流 假设8LED分接P1口8引脚硬件连接
    P1_1P1_7接7LED例程:
    #include

    sbit P1_0 P1 ^ 0
    sbit P1_1 P1 ^ 1  
    sbit P1_2 P1 ^ 2
    sbit P1_3 P1 ^ 3
    sbit P1_4 P1 ^ 4
    sbit P1_5 P1 ^ 5
    sbit P1_6 P1 ^ 6
    sbit P1_7 P1 ^ 7

    void Delay(unsigned char a)
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++) 表示空语句CPU空转
    }          i 0加125CPU概耗时1毫秒
    }

    void main(void)
    {
    while(1)
    {
    P1_0 0
        Delay(250)
    P1_0 1

    P1_1 0
        Delay(250)
    P1_1 1

    P1_2 0
        Delay(250)
    P1_2 1

    P1_3 0
        Delay(250)
    P1_3 1

    P1_4 0
        Delay(250)
    P1_4 1

    P1_5 0
        Delay(250)
    P1_5 1

    P1_6 0
        Delay(250)
    P1_6 1

    P1_7 0
    Delay(250)
    P1_7 1
    }
    }


        sbit 定义位变量unsigned char a 定义符字符型变量a节省单片机部资源效值0~255main函数调Delay()函数
    Delay函数单片机空转LED持续点亮灭LED亮while(1)产生循环



    (三)

        面讲LED产生流动否发现问题:写太冗长简单点呢?C51部函数
    INTRINSH实现函数unsigned char _crol_(unsigned char a unsigned char n) 变量a循环左移n位果先P1口赋
    0000 0001n1时便会产生面样效果
    #include
    #include

    void Delay(unsigned char a)
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++)
    }
    }

    void main(void)
    {
    unsigned char b i
    while(1)
    {
    b 0xfe
    for(i 0 i < 8 i++)
    {
        P1 _crol_(b 1)
                  b P1
        Delay(250)
    }
    }
    }


        INTRINSH函数中unsigned char _cror_(unsigned char a unsigned char n)右移实现样效果里累述
        流水灯花样写种拉幕式流动等程序简单兴趣朋友试着写写
        讲朋友定知道编译软件?里家介绍吧?WAVE(伟福)家定听说吧
    KEIL2KEIL2面讲讲KEIL2编译软件
    1安装软件应该讲吧
    2安装完启动KEIL软件左击Project>New Project>输入文件名>选择芯片(里般Atmel
    AT89C51AT89C2051点确定
    3点File>New>输入编写程序保存C文件(般情况保存文件名前面工程名样)

    4展开Target 1 >右击Source Group 1 >Add Files to Group 'Source Group 1'>选择刚保存C文件点击ADD关闭
    话框样C文件加Source Group 1
    5右击Target 1>Options for 'Target 1' >Target中填写晶体Output中Create HEX Files 前钩点确

    6点Project>Rebuild All Traget Files 提示  
                                      creating hex file from XXX
          XXX 0 Error(s) 0 Waring(s)
    表示编译生成HEX文件成功接HEX文件烧单片机中仿真器否达预先目  
    嘿嘿现否成感果做流水彩灯开发简单产品加驱动电路做出漂亮流动彩灯
    现止应该知道单片机功强吧果单纯数字电路模拟电路知识设计流动彩灯花点工夫
    时间行单片机样写程序控制行说样句话道理学单片机程序思想重




    (四)

        呵呵朋友相信流水灯做错吧现玩出种花样?会说想想流流呵呵
    工程师设计单片机做流水灯样太浪费点吧 ^_^  
        学数字电路朋友定动手做8路者6路抢答器纯粹数字电路知识做设计电路感较困难抢答器显
    示器7段数码里讲讲单片机数码显示09抢答器实现放面探讨抢答器涉键盘
    容8段数码分阴阳两种8段数码8LED组成(包括数点)阳8LED阳级连接起理
    阴阴极连接起8LED应标号:({0x3f 0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f} 09数字)
              a                                          0     1   2     3    4    5    6    7    8    9
              __                                     0011 11110000 01100100 11110101 1011
          f | | b     
            |__|
            |g | c
          e |__| dp
              d
        般情况计算取码方便adp次接单片机某口Px0Px7x表示0123中样
    某口赋值相应LED段点亮硬件连接注意:单片机直接驱动LED通控制三级
    导通截止控制LED亮灭
        果阴数码adp次接单片机P00P07注意:P0口需接拉电阻拉电阻简单说电拉
    高提高驱动力:P0 0X3F显示数字 0 0X3F 2进制 0011 1111 低位高位数次1111 1100
    IO电分高高高高高高低低应adp 亮亮亮亮亮亮灭灭图出gdp段
    亮段均亮数字 0 字样数字字符理朋友会问取字模岂
    麻烦?考虑高低电什?^^ 呵呵实网LED取模软件果定计算机编程语言朋友试着写
    取模程序计算机计算诸述0X3F数值
    #include

    void Delay(unsigned char a)
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++)
    }
    }

    void main(void)
    {
    P0 0X3F 显示 0  
    Delay(250)延时
    P0 0X00短暂关闭显示关闭会造成显示模糊清

    P0 0X06 显示 1
    Delay(250)
    P0 0X00

    显示数字2F略
    }

        里想必家定0F显示出吧果显示两位数三位数呢?许朋友会想:P0口接
    数码P1口接数码果显示4位5位数字呢?岂块AT8951接难接4位5位?
    肯定
        说里讲讲数码显示方式分两种:动态扫描静态显示面说静态显示果采动态扫
    描显示解决面问题显示数码面说静态显示数码COM脚接VCCGND端接PX
    口样PX口输出相应高低电显示应数字字符果采动态扫描方法显示6数码硬件
    连接样解决:adp接P00P076COM脚接外口P20P25P0口作段选(控制数字字符)P2口作位选(选

    通数码导通)样控制P0P2口控制6数码细心朋友会问样问题:P2位选数码亮
    控制6起亮灭嘛? ^_^ 想想象哦?办难道错?
        嘿嘿问问题?黑夜里着支烟面前快速晃动会发现什样现象?原连续点变成条连
    续曲线者直线回头仔细想想数码原理样忘单片机计算机哦计算机运算速
    度家想知吧
        里说说51单片机机器周期时钟周期等概念谓机器周期访问次存储器时间1机器周期包括12时钟周期果
    单片机工作12M晶体时钟周期:112微妙机器周期12*112 1微妙果晶体6M时钟周期机器周期少呢
    ?汇编中关心指令执行机器周期长短1周期2周期4周期等
        说着说着跑远回原话题果位选P2作面烟划6起亮
    起灭 ^_^ 哈哈原      记住某时刻数码发光果句话理解真明白
    意思朋友现务6数码分显示123456搞定?先试着写写咯

    #include

    void Delay(unsigned char a)
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++)
    }
    }

    void main(void)
    {
    while(1)
    {
    P0 0x061码段
    P2 0x01选通位者P2_0 1  
    Delay(20)延时约20毫秒
    P0 0X00关闭显示

    P0 0x5b2码段
    P2 0x02 选通位者P2_1 1
    Delay(20)
    P0 0X00

    P0 0x4f3码段
    P2 0x04 选通位者P2_2 1
    Delay(20)
    P0 0X00

    P0 0x664码段
    P2 0x08 选通位者P2_3 1
    Delay(20)
    P0 0X00

    P0 0x6d5码段
    P2 0x10选通位者P2_4 1  
    Delay(20)
    P0 0X00

    P0 0x7d6码段  
    P2 0x20选通位者P2_5 1  
    Delay(20)
    P0 0X00
    }
    }



    (五)

        相信家定见数字时钟教学楼厅定吧次路基便瞟眼根没想工作原理什天
    做出觉成感呢呵呵 ^_^
        接面讲先做简单实验:数码轮流显示0910数字楞着干什快动手写程序呀象点难哦
    先嘿嘿关机吧先想想样?
    #include

    unsigned char code SEG_TAB[ ] {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f} 09数字

    void Delay(unsigned int a) unsigned int 定义符整形取值范围032768
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++)
    }
    }

    void main(void)
    {
    unsigned char i
    while(1)
    {
    for(i 0 i < 10 i++)
    {
        P0 SEG_TAB[ i ] 取SEG_TAB数组中值
        P2 0X01
        Delay(1000)
    }
    }
    }

        显示09跳动显示心着起跳呀离目标迈进步错继续努力
        面显示数码数字09样显示6数字呢?样做时钟出玩玩记记前面
    讲P2口位选作嘿嘿没忘记
    #include

    unsigned char hour 12 min 0 sec 0
    unsigned char code SEG_TAB[ ] {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f} 09数字

    void Delay(unsigned char a)
    {
    unsigned char i
    while( a 0)
    {
    for(i 0 i < 125 i++)
    }
    }

    void disp(void)
    {
    P0 SEG_TAB[ sec 10 ]显示秒位
    P2 0X01
    Delay(15)
    P2 0

    P0 SEG_TAB[ sec 10 ]显示秒十位
    P2 0X02
    Delay(15)
    P2 0

    P0 SEG_TAB[ min 10 ]显示分位
    P2 0X04
    Delay(15)
    P2 0

    P0 SEG_TAB[ min 10 ]显示分十位
    P2 0X08
    Delay(15)
    P2 0

    P0 SEG_TAB[ hour 10 ]显示时位
    P2 0X10
    Delay(15)
    P2 0

    P0 SEG_TAB[ hour 10 ]显示时十位
    P2 0X20
    Delay(15)
    P2 0
    }

    void main(void)
    {  
    while( 1 )
    {
    disp( )
    }
    }  
        编译烧录芯片观察运行现象矣直显示12:00:00难道时钟没启动?外原呢? 哦原3变量
    secminhour初始化值直没改变样改变数值呢?朋友定会认:秒位延时1秒加1
    秒十位延时10秒加1直加6分位加1次类推样想法错朋友没想C语言般延时(非
    放中断里)极精确样累计天24时误差肯定延时方法写时钟1时误差8秒
    什概念天24时24*8192约3分钟月10分钟没方法改进呢?里涉单片机中
    较重核心部分:单片机中断定时器运想写出较精确(里说相前面做法言较精确已果做
    更加精确时钟时钟芯片较点常DS12887DS1302等)时钟程序定调中断定时器家先教材书
    吧毕竟家出书肯定写系统面简单讲讲


    (六)

        什中断呢?讲较通俗例子:正家中电视突然电话响第反应什?先跑接电话接完电话
    继续电视中断例子中断电话引起跑响应中断接电话中断处理接完电话接续电视
    恢复中断等中断
        象单片机没什联系呀?朋友许会样疑问单片机然会电视会接电话 ^_^ 类
    :单片机正执行某务突然更重事件求单片机响应单片机会应答响应执行更重务(中断处理
    )原务继续等(现场保护)执行完更重务回中断入口处继续执行原务(现场中断恢复)51系列
    单片机5中断源分:外中断0 定时器T0中断外中断1定时器T1中断串口中断     
        许朋友已概领会中意思朋友迷迷糊糊紧继续面讲讲单片机定时器什
    ?工作?定时器家字面出概意思吧?简单说:起定时作单片机计数定时器分:方式
    0方式1方式2方式3等4种工作方式朋友定会问:定时器启动?风扇定时器相信家定吧单片机定时器
    该启动呢?总该手拧定时器吧 ^_^ 然单片机指令启动定时器面定时器0说

    说启动定时器0

    TMOD 0X01设置定时器0 工作方式0
    TH0 (65536 5000) 256载入高8位初值
    TL0 (65536 5000) 256载入低8位初值
    TR0 1        启动定时器

        ^_^简单吧样定时器启动中TMODTC方式控制寄存器:

    D7 D6 D5 D4 D3 D2 D1 D0
        _      _
          GATE CT    M1    M0    GATE CT M1 M0

            |_________    __________| |_________    __________|
    |        TC1          | |        TC0          |

        CTcounter(记数器)timer(定时器)选择位值1作计数器0定时期GATE门控位M1M0工作方
    式选择:M10M00 方式0:13位定时记数器M10M01方式116定时记数器M11M00方式2动装载8位
    定时记数器M11M01方式3适TC028位定时记数器
        说堆感点困惑吧说说面TMOD 0X01什0X01家:选择定时器0方式0
    TC1全0TC0M10M01D0D70X010X01表示16进制数家应该知道吧D0D7表示2进制数
    需转换
        TH0 (65536 5000) 256载入高8位初值12M晶体定时5000微秒5毫秒果12M该计算
    呢?果110592M呢?记记前面讲机器周期时钟周期概念? ^_^忘前面吧呵呵没事学嘛忘
    翻翻书实诉5000 1 * C 显然C5000果110592M1应该10855000   
    1085 * CC5000 1085 具体少家算算吧?理TL0样 细心朋友会发现网者资料
    TH0TL0面样直接TH0 0XECTL0 0X78 面样忘单片机计算机种哦C话直
    接写计算公式行计算交单片机完成
        TR0 1句启动定时器0开始记数哦点朋友会问65536里呢?呵呵忘:设置定时器0  
    工作方式016位(216次方少算算知道)简单吧?中断起呢?请继续面讲解

    TMOD 0X01设置定时器0 工作方式0
    TH0 (65536 5000) 256载入高8位初值
    TL0 (65536 5000) 256载入低8位初值
    TR0 1        启动定时器
         
    EA 1开总中断
    ET0 1开定时器中断0表示关闭
        样初始化定时器T0中断定时器满5毫秒产生次中断产生中断处理呢?嘿嘿仔细想想?
    ^_^
    次中断变量加1200次中断1秒时间?起面说延时出更加精确呢?
    肯定想想1秒种时间单片机产生次中断单片机会会累着呢?恩果12M晶体T0次中
    断产生65336毫秒时间?50毫秒中断次样20次搞定秒时间 ·爽·
        讲现写时间程序吧 ^_^


    #include

    #define HI    ((65536 50000) 256)
    #define LO    ((65536 50000) 256)
    #define _TH0_TL0_          (65536 50000)
    #define M    20            (100025)

    **********************************************************************************************
    unsigned hou 12 min 0 sec 0

    unsigned char SEG_TAB_B[ ] {0xc00xf90xa40xb00x990x920x820xf80x800x90} 09数字
    unsigned char SEG_TAB_A[ ] {0x400x790x240x300x190x120x020x780x000x10}09数字

    *********************************************************************************************
    void Delay(unsigned char a)延时程序a*1MS
    {
    unsigned char j  
    while(a 0)
    {
    for (j 0 j < 125 j++)
    }
    }

    *********************************************************************************************
    void Disp(void)数码显示
    {
    P2_0 1
    P1 SEG_TAB_B[ hou 10 ]  
    Delay(5)
    P2_0 0

    P2_1 1
    P1 SEG_TAB_A[ hou 10 ]
    Delay(5)
    P2_1 0

    P2_2 1
    P1 SEG_TAB_B[ min 10 ]  
    Delay(5)  
    P2_2 0

    P2_3 1
    P1 S EG_TAB_A[ min 10 ]  
    Delay(5)
    P2_3 0

    P2_4 1
    P1 SEG_TAB_B[ sec 10 ]  
    Delay(5)  
    P2_4 0

    P2_5 1
    P1 SEG_TAB_B[ sec 10 ]  
    Delay(5)  
    P2_5 0
    }

    ********************************************************************************************
    void IsrTimer0(void) interrupt 1 using 1    定时50ms
    {
    static unsigned char count 0 定义静态变量count

    count++
    if(count M)
    {
    count 0  
    sec++  
    if(sec 60)
    {
    min++
    sec 0
    if(min 60)
    {
        hou++
        min 0
        if(hou 24)
        {
        hou 0
        }
    }if
    }if
    }if
    }

    ******************************************************************************************
    void Timer0Init(void) 定时器0
    {
    TMOD 0x01

    TH0 HI
    TL0 LO
    TR0 1

    ET0 1
    EA 1

    }

    ******************************************************************************************
    void main(void) 函数
    {
    Timer0Init()

    while(1)
    {
    Disp()
    }
    }


       

        简单吧点懂哦慢慢体会吧果写时钟程序51单片机学80 中断
    定时记数器器重东西单片机方会涉中断定时家掌握哦 ^_^  
        哈哈赶紧编译HEX文件搭硬件烧入单片机电效果先呵呵现应该成感吧想时钟居然
    简单 嘿嘿问题时钟然做出精度样呢?两时许出什误差天者年呢?
    晕天呀年算话时钟根没实价值家说C写出精度高时钟程序点悔
    学汇编吧然选择C悔嘿嘿想想C高级语言会输汇编呢 ^_^ 呵呵面段代码:


    static unsigned char count 0

    TR0 0
          TL0 + (_TH0_TL0_ + 9) 256
          TH0 + (_TH0_TL0_ + 9) 256 + (char)CY
          TR0 1

    count++
        中断处理服务程序中加入面代码 TR0 0 先关闭定时器T0然重新TH0TL0 赋值开启 TR0 1烧入单片
    机效果样第次精确吧误差郁闷什呢?硬件造成误差软件弥补先
    时钟点亮走时者天底误差少取均值(里10时快1秒)通语句
    if(hour 10 0)
    {
    sec
    }
    弥补样会出现样现象:秒直接跳变通细分实现10时行具体操作留
    朋友吧


    (七)

        回讲讲键盘家肯定见银行柜员机吧取钱输入密码键盘超市购物取回寄存物品输入密码现
    PC机键盘键盘工作呢?般2种方式:(1)扫描法断扫描键盘状态送CPU判断处理果键盘数目
    话显然适合(2)线反转法通行列状态改变判断键
        现P1口接4*4键盘P10--P13接行P14P17接列接44K7拉电阻VCC代码:

    键盘扫描法程序
    数码显示相应键值
    P10--P13接行
    P14P17接列
    #include

    unsigned char code tab[ ]{0x3F0x060x5B0x4F
            0x660x6D0x7D0x07
            0x7F0x6F0x770x7C
          0x390x5E0x790x71}0F16键植

    ******************************************************************************
    void Delayt(unsigned char t)延时函数
    {
    unsigned char i
    for(t0i    for(i0i<255i++)
    }

    ******************************************************************************
    bit pkey(void)判断键否通返回值确定
    {
    P10xf0
    if(P10xf0)
        {
        Delayt(25)
          if(P10xf0)
          return 1
          else  
          return 0
        }
    else
          return 0
    }

    ******************************************************************************
    void main(void)函数
    {
    unsigned char keyjks
    while(1)
    {
        if(pkey()1)
        {  
          P10xfe
        k0xfe
          for(j0j<4j++)
              {  
                      sP1&0xf0
            switch(s)
        {
        case 0xe0 key4*j+0 break  
            case 0xd0 key4*j+1 break
          case 0xb0 key4*j+2 break
          case 0x70 key4*j+3 break
          default break  
        }
        k(k<<1)|0x01
        P1k
                    }for
        }if
    if((P1&0xf0)0xf0)
            P0tab[key]
    P21
    Delayt(50)
    }while
    }


        种线反转法实现:
    1扫描法相列线置低电行置高读行状态
    21相反行置低列置高读列状态
    3键2次读状态结果键位置样2次输出2次读入完成键识

        子函数:
    unsigned char key_vscan(void)
    {
        unsigned char row col
        P1 0xF0
        row P1&0xF0
        row row&0xF0

        P1 0x0F
        col P1&0x0F
        col col&0x0F

        return(key_val(row|col))
    }


        面介绍介绍键程序键执行命令

    void main (void)
    {

    unsigned char b 0
    while( 1 )
    {
    if(P1_0 0)
        {
    Delay(10)
          if(P1_0 0)
    {
        b++  
        if( b N )N键功数目
        {
        b 0
        }
          while(P3_2 0)等键松开
    }
        }
    switch( b )
        {
          case 1 P2_0 0xFE
                  break
          case 2 P2_1 0xfd
          add your code here
        }
    }
    }



    (八)文字写2005年5月时间关系直未完成闲着聊接着写文字写2006年6月5日
        里想面点作简单说明果刚学单片机写代码VERY GOOD果面代码应产品话告诉面写键识代码全部垃圾代码^_^傻吧呵呵什?键正常工作?
        请里:
    if(P1_0 0)
    {
    Delay(10)问题里CPU里空转?
        if(P1_0 0)
    {
    add your code here
    }
    }
    进入第1if判断语句进入Delay(10)Delay函数完全CPU执行(空语句)做产品者代码时非常耗费单片机部资源什办法?呵呵肯定
        解决方法致2种:
    1延时函数放中断中中断里查询延时标志位*仅仅键盘识延时代码见EX1*
    2直接中断中查询键标志位见EX2
         
    EX1
    unsigned char Delaytime

    void Delay(unsigned char Delaytime)
    {
    while(Delaytime 0 )等里直Delaytime0
    }

    void Timer0_interrupt(void) interrupt 1 using 2
    {
    if(Delaytime )
    Delaytime

    add your other code here
    }

    Delay函数具体延时长时间设定T0定时器中断Delaytime积定时器中断50MSDelaytime20话50MS*201S

    EX2:
    #define Press_key P2 ^ 7定义键IO

    void P_key(void)
    {
    char new_valueold_value

    new_value Press_key

    if(new_value && old_value)识键
    {
    Turn_On_LEd( )
    add your other code here
    }
    old_value new_value
    }

    void Timer0_interrupt(void) interrupt 1 using 2
    {
    P_key()

    add your other code
    }

    然实际程中简单简洁希家够举反三哦 ^_^


    (九)

    写家感觉样?家觉难吧实51简单真希家完篇文字信说51单片机已
    入门写文字回答时隔13月久继续写东西没前激_情热情草草事结尾希家背里骂哦^_^然讲简单东西单片机功非常强想定单片机实现
    然单片机外部芯片数字温度传感器DS18B20实时时钟芯片DS1302访问AT24CXXEEPROM存储器等更电路家时学程中慢慢掌握
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    C语言代码大全

     乘法口诀表 #include <stdio.h> #include <conio.h> void main(void) { int i,j,x,y; clrscr(); pr...

    5年前   
    1754    0

    专升本C语言题及答案

    C语言精编100题一、单选题1. 由C语言编写的代码程序( )A. 可直接执行 B. 是一个源程序C. 经过编译即可执行 D. 经过编译解释才能执行2. 按照C语言规...

    3年前   
    1158    0

    AT89C51单片机智能风扇

    AT89C51单片机智能风扇摘要随着人们生活水平及科技水平的不断提高,现在家用电器在款式、功能等方面日益求精,并朝着自动化、智能化、环保化、和人性化等方向发展。过去的电器不断的显露出其不足之处...

    4年前   
    707    0

    《单片机原理及应用》实验指导书(C语言)

    《 单 片 机 原 理 及 应用》实 验 指 导 书(C语言)XX大学物电学院微机教研室 XX2011前 言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在...

    3年前   
    670    0

    技能高考专题:C语言练习

    第1题 (20.0分) 题号:332 难度:难 第3章/*----------------------------------------------...

    3年前   
    612    0

    电脑编程 所有C语言题库

    试卷编号:2203所属语言:C语言试卷方案:所有C语言题库试卷总分:1220分共有题型:1种一、程序填空 共122题 (共计1220分)第1题 (10.0分) 题号:558 ...

    4年前   
    938    0

    c语言实验报告

    c语言实验报告  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成...

    11年前   
    781    0

    C语言作业:学通讯录

    学生通讯录一、 语言和环境1. 实现语言:C语言。2. 环境要求:devC++。二、 实现功能开发一套学生通讯录C语言系统,具体实现如下功能:1. 打开系统显示欢迎界面,以及功能菜单,用户输入...

    3年前   
    710    0

    C语言上机题库WORD版

    C语言习题集3.11输入'A'~'F'中的一个字母,代表一个十六进制数,将其转换为十进制数,求该数与15的和并输出。输入格式:B输出格式:26#include<stdio.h>int main...

    3年前   
    859    0

    c语言高级面试题

    整个测试遵循以下的约定:u       假定在所有的程序中必须的头文件都已经被正确包含。考虑如下的数据类型:u       char 为1个字节u       int 为4个字节u      ...

    2个月前   
    91    0

    C语言实验报告《指针》

    C语言实验报告《指针》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________ ...

    11年前   
    946    0

    C语言试题库

    C 语言试题库 阅读说明*1 ————为题号A ————为答案-个C程序的执行是从 A)本程序的main函数开始,到main函数结束 B)本程序文件的第-个函数开始...

    1年前   
    657    0

    C语言知识点总结

    C语言最重要的知识点总体上必须清楚的: 1)程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选...

    3年前   
    611    0

    C语言实验报告《数组》

    C语言实验报告《数组》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________  ...

    11年前   
    879    0

    51单片机秒表计时器课程设计报告(含C语言程序)课程设计

    XXXXXX学院 51单片机系统设计 课程设计报告题 目: 秒表系统设计 专业、班级: 学...

    2年前   
    435    0

    国开电大《C语言程序设计》答案

    形考1在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为(  )。选择一项:A. main 正确恭喜你,答对啦!!B. MAIN C. name D. function .题目2正确...

    1年前   
    402    1

    C语言论文致谢

    C语言论文致谢  在硕士学位论文即将完成之际,我想向曾经给我帮助和支持的人们表示衷心的感谢。首先要感谢我的导师曹计昌教授,他在学习和科研方面给了我大量的指导,并为我们提供了良好的科研环境,让我...

    12年前   
    621    0

    C语言实验报告《函数》

    C语言实验报告《函数》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________  ...

    12年前   
    1344    0

    C语言综合实验2报告

    实验报告实验名称 小型学生信息管理系统 实验项目 编写一学生信息管理系统,用来管理学生基本信息及成绩信息专业班级 姓名 学号 指导教师 成...

    3年前   
    437    0

    C语言程序设计习题试题集

    《C语言程序设计》精品课件试题目录(按住CTRL键点击超链)单项选择题………………………第002页阅读程序题………………………第018页程序填空题………………………第039页编写程序题…………...

    1年前   
    5355    0

    文档贡献者

    豆***2

    贡献于2020-08-01

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档