单片机C语言程序举例(三)

发布者:SereneWhisper最新更新时间:2016-02-25 来源: eefocus关键字:单片机  C语言  程序举例 手机看文章 扫描二维码
随时随地手机看文章
14.音乐播放

//此程序在硬件上调试通过
//本程序的单片机晶振采用11.0592M
#include
sbit      speaker=P1^2; 
unsigned char timer0h,timer0l,time;
        //世上只有妈妈好数据表
code unsigned char sszymmh[]={        6,2,3,      5,2,1,      3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
                                      6,2,4,      3,2,2,      5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
                                      6,1,1,      5,2,1,      3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
                                      5,2,1,      6,2,1,      3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
                                      2,2,1,      1,2,1,      6,1,1, 1,2,1, 5,1,6, 0,0,0
                                      };
       // 音阶频率表 高八位
code unsigned char FREQH[]={
                                0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
                                0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
                                0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
                                0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
                               } ;
         // 音阶频率表 低八位
code unsigned char FREQL[]={
                                 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
                                 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
                                 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
                                 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
                                };
void delay(unsigned char t)
   {
   unsigned char t1;
   unsigned long t2;
   for(t1=0;t1    {
    for(t2=0;t2<8000;t2++)
       {
        ;
        }
   }
   TR0=0;
 }
void t0int() interrupt 1
{
 TR0=0;
 speaker=!speaker;
 TH0=timer0h;
 TL0=timer0l;
 TR0=1;
 }
void song()
{
 TH0=timer0h;
 TL0=timer0l;
 TR0=1;
 delay(time);                      
 }

 void main(void)
 {
 unsigned char k,i;
 TMOD=1; //置CT0定时工作方式1
 EA=1;
 ET0=1;//IE=0x82 //CPU开中断,CT0开中断
 while(1)
      {
       i=0; 
       while(i<100){         //音乐数组长度,唱完从头再来       
       k=sszymmh[i]+7*sszymmh[i+1]-1;
       timer0h=FREQH[k];
       timer0l=FREQL[k];
       time=sszymmh[i+2];
       i=i+3;
       song();
        }
      }
  }

15.红外收发演示


#include


sbit LED=P3^3;//红外发射
sbit LED1=P1^3;
sbit IR=P3^2;//红外一体化接收

 bit Flag;

void Init_Timer0(void)
{
 TMOD |= 0x01;       
 TH0=0xf0;                
 TL0=0x00;
 EA=1;                     
 ET0=1;                    
 TR0=1; 
}

 

void Timer0_isr(void) interrupt 1 using 1
{
 TH0=0x0f;  
 TL0=0x00;
 Flag=!Flag;
}


main()
{

 unsigned int j;
 Init_Timer0();


 while(1)
 {

    LED1=IR;//读取一体化接收头数值
 if(Flag)
    {
     for(j=0;j<27;j++)//大约38KHz
     {
      LED=!LED;//发射管输出
      }
     }
   }
}

16.串口通信

//打开串口调试程序,将波特率设置为2400,无奇偶校验


#include                
                                 

#include                


#ifdef MONITOR51                        
char code reserve [3] _at_ 0x23;        
#endif                                  
                                        
sbit KEY=P3^2;

void delay(unsigned int U)
{
 while(--U);
}

void main (void)
{


#ifndef MONITOR51
    SCON  = 0x50;         
    TMOD |= 0x20;              
    TH1   = 0xf3;               
    TR1   = 1;                 
    TI    = 1;                 
#endif


  while (1)
    {
   
    if(!KEY)
       {
        delay(10000);
        if(!KEY)
          {
          printf ("This programer test ok!n"); 
         printf ("12:25:26n"); 
           }
  }
    }
}

17.PWM调光

 

#include

sbit LED = P1^2;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON ;//定义高电平时间
void delay(unsigned int cnt)
{
 while(--cnt);
}

main()
{
bit Flag;

TMOD |=0x01;//定时器设置 0.1ms in 12M crystal
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)
              //这个里可以添加其他程序 如到最亮时候控制设备
      Flag=1;
   }
  }

 while(Flag)     //亮度递减 同上,是个相反的过程
  {
   delay(20000);
   PWM_ON--;
   if(PWM_ON == 0)
     {
      Flag=0;
   }
  }
}



void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-100)/256;
TL0=(65536-100)%256;//定时0.1mS

if (count==PWM_ON)
    {
     LED = 1; //灯灭
    }
  count++;
if(count == CYCLE)
    {
    count=0;
 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
    LED = 0;//灯亮

    }

}


关键字:单片机  C语言  程序举例 引用地址:单片机C语言程序举例(三)

上一篇:基于ATMEGA8515的SPI驱动ST7565P液晶屏的程序
下一篇:单片机C语言程序举例(一)

推荐阅读最新更新时间:2024-03-16 14:45

基于ARM的32位MCU提供SoC设计参考
随着制造工艺的迅猛发展,MCU在外设集成、性能、功耗及降低成本方面都有了长足的进展,几乎能提供与SoC相类似的性能,而且应用数量正日趋增长。特别是基于ARM的32位MCU,为SoC设计人员提供了快速低廉的设计参考。 系统级芯片(SoC)技术可以看作是专用集成电路(ASIC)的一种新的设计模式,较之ASIC,其设计周期短,能为设计人员消除设计特殊应用时遇到的障碍。SoC的性能接近于成熟的ASIC,不过它仍需要掩膜,并不能节省ASIC所需的大部分设计成本。 随着先进的制造工艺将更多外设集成于芯片、降低功耗和提供更多的性能,ASIC和标准32位微控制器(MCU)的区别也在缩小。对于基于ARM内核的微控制器而言,当集成了关键外设时,这
[单片机]
μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植
引 言 目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品
[单片机]
μCOS-Ⅱ在ARM系列<font color='red'>单片机</font>S3C44B0x上的移植
STM32F103单片机生成16路PWM波
单片机输出pwm波在项目中是恨常用的一个功能,今天就总结一下用STM32F103C8T6单片机输出16路 pwm波。 使用keil5软件,用标准库函数来实现。 首先看定时器初始化 void TIM1_PWM_Init(u16 arr, u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitSturcture; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | R
[单片机]
STM32F103<font color='red'>单片机</font>生成16路PWM波
高性价比MCU的传奇 —— STM32H7系列
STM32可以列出很多关键词,跨界通用、全面覆盖、完整生态、超低功耗、多种应用。而高性价比是最受用户关注的关键词。 从2007年推出世界第一款Cortex-M MCU,到2020年新推出的H7系列高性能大内存产品,十几年来,ST在MCU市场上不断加大创新力度,STM32持续出新。5大家族、17条产品线、千款型号、I/O兼容,STM32大家族跨越通用、超低功耗、高性能和超高性价比MCU,全面覆盖各种应用需求,打造出了32位MCU的大帝国。 谈到STM32的高性能家族产品,大家已经对STM32F2/F4/F7耳熟能详。之后的STM32H7系列继承和发展了高性能产品家族的特性,其中单核的H743/750和双核745/747也已经得到了
[单片机]
基于51单片机的OLED显示图片文字
一、前言 从性能来说OLED屏幕分辨率相对较高,引脚也少很多,占用的I/O口会少很多。从功耗来说首先oled显示屏不需要背光灯,当有电流通过时,这些有机材料就可以发光,而且3.3V~5V之间都可以使用。从外观来说体型更小,重量更轻更薄,可用来制作许多小型显示设备。这次我使用的是四个引脚的0.95寸oled显示屏,进行文字图片的循环显示。 二、OLED模块介绍 1、液晶显示屏 液晶显示器,为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。 液晶显示器的工作原理:液晶
[单片机]
基于51<font color='red'>单片机</font>的OLED显示图片文字
MCS51单片机的定时器/计数器概念 非常好的寄存器关系图
一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令
[单片机]
MCS51<font color='red'>单片机</font>的定时器/计数器概念 非常好的寄存器关系图
利用单片机构成高精度PWM式12位D/A
.前言 在用单片机制作的变送器类和控制器类的仪表中,需要输出1—5V或4—20mA的直流信号的时候,通常采用专用的D/A芯片,一般是每路一片。当输出信号的精度较高时,D/A芯片的位数也将随之增加。在工业仪表中,通常增加到12位。12位D/A的价格目前比单片机的价格要高得多,占用的接口线数量也多。尤其是在需隔离的场合时,所需的光电耦合器数量与接口线相当,造成元器件数量大批增加,使体积和造价随之升高。如果在单片机控制的仪表里用PWM方式完成D/A输出,将会使成本降低到12位D/A芯片的十分之一左右。我们在S系列流量仪表中采用了这种方式,使用效果非常理想。下面介绍一下PWM方式D/A的构成原理。 .电路原理 一般1
[单片机]
利用<font color='red'>单片机</font>构成高精度PWM式12位D/A
以C8051F020单片机为控制核心的人机交互系统设计
在现代各类仪器的开发中,人机交互功能正起着无可替代的作用。人机交互界面友好的仪器将更容易操作和使用,从而提高工作效率。液晶显示器(LCD)具有功耗低、价格低、寿命长、接口控制方便等特点,在科研与设计领域正发挥着越来越大的作用。FPGA 作为单片机外设的接口芯片,可以大大简化接口电路,通过对FPGA 进行编程,可以实现常用的译码、地址选通等功能。 本文以C8051F020 单片机与FPGA 互连系统为控制核心,以液晶显示控制器T6963C 为例,结合行扫描键盘,简述了一种人机交互功能的设计。 1 系统设计方案: FPGA 可在很大程度上扩展单片机的资源,然而人机交互功能仍应尽量减少对单片机及FPGA 的资源消耗, 以便将更多
[单片机]
以C8051F020<font color='red'>单片机</font>为控制核心的人机交互系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved