带注解简单c51程序.docx

上传人:b****7 文档编号:10640639 上传时间:2023-02-22 格式:DOCX 页数:11 大小:18.86KB
下载 相关 举报
带注解简单c51程序.docx_第1页
第1页 / 共11页
带注解简单c51程序.docx_第2页
第2页 / 共11页
带注解简单c51程序.docx_第3页
第3页 / 共11页
带注解简单c51程序.docx_第4页
第4页 / 共11页
带注解简单c51程序.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

带注解简单c51程序.docx

《带注解简单c51程序.docx》由会员分享,可在线阅读,更多相关《带注解简单c51程序.docx(11页珍藏版)》请在冰豆网上搜索。

带注解简单c51程序.docx

带注解简单c51程序

日志

[转]带注解简单c51程序-学习专用2010-9-915:

47阅读(5)

下一篇:

单片机C语言编程... |返回日志列表

∙赞赞赞赞

∙转载

∙分享

∙评论

∙复制地址

∙更多

 名称:

IO口高低电平控制

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   主函数

------------------------------------------------*/

voidmain(void)

{

P1=0xFF;       //P1口全部为高电平,对应的LED灯全灭掉,ff

换算成二进制是11111111

P1=0xfe;       //P1口的最低位点亮,可以更改数值是其他的

灯点亮

                 //0xfe是16进制,0x开头表示16进制数,fe换

算成二进制是11111110

while

(1)        //主循环

 {

                 //主循环中添加其他需要一直工作的程序

 }

}

-----------------------我是分割线-------------------------

名称:

IO口信号输入

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   主函数

------------------------------------------------*/

voidmain(void)

{

P1=0xFF;       //P1口全部为高电平,对应的LED灯全灭掉,ff

换算成二进制是11111111

while

(1)        //主循环

 {

 P1=P3;         //读入P3的值然后赋值给P1,如果P3.0=0,其

他为1,则执行过该语句后P1.0=0,其他值为1,对应P1.0口的灯亮

                 //程序可以通过独立按键测试,在开发板上需

要切换成独立按键模式

 }

}

-----------------------我是分割线-------------------------

名称:

流水灯

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   延时子程序

------------------------------------------------*/

voiddelay(unsignedintcnt)

{

 while(--cnt);

}

/*------------------------------------------------

                   主函数

------------------------------------------------*/

main()

{

 P1=0xfe;          //给初始化值换算成二进制是11111110

 while

(1)

     {

   delay(30000);//延时程序

   P1<<=1;     //左移一位该语句等效于P1=P1<<1

   P1|=0x01;   //最后一位补1,该语句等效于P1=P1|

0x01符号"|"表示"或"

   if(P1==0x7f)//检测是否移到最左端?

"=="表示检测

符号2端的值是否相等

         {

    delay(30000);

       P1=0xfe;//重新赋值

         }

     }

}

-----------------------我是分割线-------------------------

名称:

独立按键

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

sbitkey1=P3^0;  //定义按键位置

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

/*------------------------------------------------

                   延时子程序

------------------------------------------------*/

voiddelay(unsignedintcnt)

{

 while(--cnt);

}

/*------------------------------------------------

                   主函数

------------------------------------------------*/

main()

{

 

 P2=0x00;

 while

(1)

     {

     if(!

key1) //按下相应的按键,数码管显示相应的码值

     P0=0x06;//数码管显示"1"

  if(!

key2)

     P0=0x5B;//2

  if(!

key3)

     P0=0x4F;//3

  if(!

key4)

     P0=0x66;//4

     }

}

-----------------------我是分割线-------------------------

名称:

独立按键去抖动

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

sbitkey1=P3^0;  //定义按键位置

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

/*------------------------------------------------

                   延时子程序

------------------------------------------------*/

voiddelay(unsignedintcnt)

{

 while(--cnt);

}

/*------------------------------------------------

                   主函数

------------------------------------------------*/

main()

{

 

 P2=0x00;

 while

(1)

     {

     if(!

key1)

        { //按下相应的按键,数码管显示相应的码值

        delay(1000);

        if(!

key1)

          {

       P0=0x06;//数码管显示"1"

           }

  }

     if(!

key2)

        { //按下相应的按键,数码管显示相应的码值

        delay(1000);//去抖动

        if(!

key2)  //检测按键确实按下,进行按键处理

          {

       P0=0x5B;//数码管显示"2"

    //这里可以添加按键按下所需要的操作,如数

据加减乘除,蜂鸣器等设备开关

           }

   }

     if(!

key3)

        { //按下相应的按键,数码管显示相应的码值

        delay(1000);

        if(!

key3)

          {

       P0=0x4F;//数码管显示"3"

    }

   }

     if(!

key4)

        { //按下相应的按键,数码管显示相应的码值

        delay(1000);

        if(!

key4)

          {

       P0=0x66;//数码管显示"4"

           }

        }

     }

}

-----------------------我是分割线-------------------------

名称:

定时器

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

sbitLED=P1^2;   //定义LED端口

/*------------------------------------------------

                   定时器初始化子程序

------------------------------------------------*/

voidInit_Timer0(void)

{

 TMOD|=0x01;  //使用模式1,16位定时器,使用"|"符号可以

在使用多个定时器时不受影响      

 TH0=0x00;      //给定初值,这里使用定时器最大值从0开

始计数一直到65535溢出

 TL0=0x00;

 EA=1;           //总中断打开

 ET0=1;          //定时器中断打开

 TR0=1;          //定时器开关打开

}

/*------------------------------------------------

                   主程序

------------------------------------------------*/

main()

{

 Init_Timer0();

 while

(1);

}

/*------------------------------------------------

                定时器中断子程序

------------------------------------------------*/

voidTimer0_isr(void)interrupt1using1

{

 TH0=0x00;   //重新赋值

 TL0=0x00;

 LED=~LED;       //指示灯反相,可以看到闪烁

}

-----------------------我是分割线-------------------------

名称:

外部中断0电平触发

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   主程序

------------------------------------------------*/

main()

{

 P1=0x55;      //P1口初始值

 EA=1;         //全局中断开

 EX0=1;        //外部中断0开

 IT0=0;        //电平触发

 while

(1)

 {

                //在此添加其他程序

 }

}

/*------------------------------------------------

                外部中断程序

------------------------------------------------*/

voidISR_Key(void)interrupt0using1

{

 P1=~P1;        

}

-----------------------我是分割线-------------------------

名称:

外部中断0边沿触发

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   主程序

------------------------------------------------*/

main()

{

 P1=0x55;      //P1口初始值

 EA=1;         //全局中断开

 EX0=1;        //外部中断0开

 IT0=1;        //边沿触发

 while

(1)

 {

                //在此添加其他程序

 }

}

/*------------------------------------------------

                外部中断程序

------------------------------------------------*/

voidISR_Key(void)interrupt0using1

{

 P1=~P1;        //s3按下触发一次,P1取反一次,这里需要切换

跳帽到独立按键模式

}

-----------------------我是分割线-------------------------

名称:

外部中断1

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

/*------------------------------------------------

                   主程序

------------------------------------------------*/

main()

{

 P1=0x55;      //P1口初始值

 EA=1;         //全局中断开

 EX1=1;        //外部中断0开

 IT1=1;        //边沿触发,IT1=0表示电平触发

 while

(1)

 {

                //在此添加其他程序

 }

}

/*------------------------------------------------

                外部中断程序

------------------------------------------------*/

voidISR_Key(void)interrupt2using1

{

 //在此处可以添加去抖动程序,防止按键抖动造成错误

 P1=~P1;        

}

-----------------------我是分割线-------------------------

名称:

矩阵键盘

#include//包含头文件,一般情况不需要改动,头文件

包含特殊功能寄存器的定义

#defineucharunsignedchar

#defineuint unsignedint

unsignedcharconstdofly[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

                    

0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

/*------------------------------------------------

                  函数声明

------------------------------------------------*/

ucharkeyscan(void);//键盘扫描

voiddelay(uinti);//演示程序

/*------------------------------------------------

                  主函数

------------------------------------------------*/

voidmain()

{

 ucharkey;

 P2=0x00;       //1数码管亮按相应的按键,会显示按键上的字

 while

(1)

{

 key=keyscan(); //调用键盘扫描,

 switch(key)

 {

 case0x7e:

P0=dofly[0];break;//0按下相应的键显示相对应的

码值

 case0x7d:

P0=dofly[1];break;//1

 case0x7b:

P0=dofly[2];break;//2

 case0x77:

P0=dofly[3];break;//3

 case0xbe:

P0=dofly[4];break;//4

 case0xbd:

P0=dofly[5];break;//5

 case0xbb:

P0=dofly[6];break;//6

 case0xb7:

P0=dofly[7];break;//7

 case0xde:

P0=dofly[8];break;//8

 case0xdd:

P0=dofly[9];break;//9

 case0xdb:

P0=dofly[10];break;//a

 case0xd7:

P0=dofly[11];break;//b

 case0xee:

P0=dofly[12];break;//c

 case0xed:

P0=dofly[13];break;//d

 case0xeb:

P0=dofly[14];break;//e

 case0xe7:

P0=dofly[15];break;//f

 }

 }

}

/*------------------------------------------------

             键盘扫描程序

------------------------------------------------*/

ucharkeyscan(void) //键盘扫描函数,使用行列反转扫描法

{

 ucharcord_h,cord_l;//行列值中间变量

 P3=0x0f;           //行线输出全为0

 cord_h=P3&0x0f;    //读入列线值

 if(cord_h!

=0x0f)   //先检测有无按键按下

 {

 delay(100);       //去抖

 if(cord_h!

=0x0f)

 {

   cord_h=P3&0x0f; //读入列线值

   P3=cord_h|0xf0; //输出当前列线值

   cord_l=P3&0xf0; //读入行线值

   return(cord_h+cord_l);//键盘最后组合码值

  }

 }return(0xff);    //返回该值

}

/*------------------------------------------------

                延时程序

------------------------------------------------*/

voiddelay(uinti) //延时函数

{

while(i--);

}

-----------------------我是分割线-------------------------

名称:

PWM调光

#include    //包含头文件,一般情况不需要改动,头

文件包含特殊功能寄存器的定义

sbitLED=P1^2;     //定义LED灯,通过LED显示调光效果

unsignedcharCYCLE; //定义周期该数字X基准定时时间如果是

10则周期是10x0.1ms

unsignedcharPWM_ON;//定义高电平时间

/**********************************************************

********/

/*                   延时函数                             

     */

/**********************************************************

********/

voiddelay(unsignedintcnt)

{

 while(--cnt);

}

/**********************************************************

********/

/*                   主函数                               

     */

/**********************************************************

********/

main()

{

bitFlag;

TMOD|=0x01;             //定时器设置0.1msin12Mcrystal

TH0=(65536-100)/256;

TL0=(65536-100)%256;     //定时0.1mS

IE=0x82;                //打开中断

TR0=1;

CYCLE=10;              //时间可以调整这个是10调整8位

PWM就是256步

while(!

Flag)

 {

  delay(20000);         //延时时间,从一个亮度到下一个亮

度的间隔时间,速度快就能看到连续效果

  PWM_ON++;             //这个使用较长延时,以便能看清楚

变化过程

  if(PWM_ON==CYCLE)

    {                   //这个里可以添加其他程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1