⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcs51-项目开发经典.c

📁 74hc595!!单片机入门芯片。底层子函数可通用。经调试成功。带keil工程
💻 C
字号:
//=================================================================================================
// 项目名:MCS51-项目开发经典
// 硬件文件名:51Studay.DDB
// 程序组目录名:MCS51-项目开发经典
// 开始时间:2007年5月21日
// 完成时间:2007年6月10日
//-------------------------------------------------------------------------------------------------
// 程序中用到哪些C51标准函数,就需要把该函数对应的头文件包含进来
//-------------------------------------------------------------------------------------------------
#include <intrins.h>
#include <string.h>
#include <absacc.h>
#include <reg52.h>
//-------------------------------------------------------------------------------------------------
// 为提高书写效率做以下宏定义
//-------------------------------------------------------------------------------------------------
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define CLOSE 1
#define OPEN  0

//=================================================================================================
#define TEST_74HC595  1
#define TEST_24C02    2
#define TEST_93C46    3
#define SET_SD2000    4
#define READ_SD2000   5
#define TEST_18B20    6
#define TEST_HD7279   7
#define TEST_BIT_IO   8
#define TEST_TLC2543  9
#define TEST_TLC5617  10
#define TEST_PWM_DA   11
#define TEST_L297     12
#define TEST_DC_MOTOR 13
#define TEST_LCM      14
//-------------------------------------------------------------------------------------------------
// 串并转换芯片74HC595操控位宏定义
//-------------------------------------------------------------------------------------------------
sbit SER_DATA_74HC595=P2^7; //74HC595串行数据输入端
sbit CP_LA_74HC595   =P2^6; //74HC595寄存器数据移入锁存器的时钟
sbit CP_SR_74HC595   =P2^5; //74HC595串行数据移入寄存器的时钟
//-------------------------------------------------------------------------------------------------

uchar t1_delay_time;//50毫秒计数器累加变量,在T1中断里累加

//-------------------------------------------------------------------------------------------------
// 函数声明
//-------------------------------------------------------------------------------------------------
void  init_cpu(void);
void  ctrl_74hc595(uchar led_display_data);
void  ctrl_74hc595(uchar led_display_data);

//=================================================================================================
//=====================                            ================================================
//=====================          主程序            ================================================
//=====================                            ================================================
//=================================================================================================
void main (void)
{ 

   init_cpu();
  

wqyloop:


    	 ctrl_74hc595(0x00);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x01);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x02);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x04);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x08);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x10);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x20);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x40);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(~0x80);
         for(t1_delay_time=0;t1_delay_time<4;);
         ctrl_74hc595(0xff);
         for(t1_delay_time=0;t1_delay_time<4;);

goto wqyloop;
}//The end of main()

//##########################  主程序结束  #########################################################
//##########################  子程序开始  #########################################################

//=================================================================================================
// 函数功能:CPU初始化函数
// 串口波特率可以由T1或T2产生,本例中用T1产生波特率
// T2用于50毫秒精确定时
// T0用于PWM控制中频率的时基
//=================================================================================================
void init_cpu(void)
{ 
  TMOD=0x12;//T1为16位计数器,T0为8位自动重装载计数器

  ET1=1;
  TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
  TL1=0x00;
  TR1=1;//T1开始定时
  EA=1;//CPU中断开放
  //以下是程序中软件逻辑需要的变量初值设置和硬件初始状态设置
  ctrl_74hc595(0xff);
 
}
//=================================================================================================
// 74HC595实现串并转换
// 其输出允许控制端(13脚-EN)接地,表示永远允许输出
// 数据应从高位(MSB)到低位(LSB)串行送如74HC595
//=================================================================================================
void ctrl_74hc595(uchar led_display_data)//595的输出,控制8个LED
{ uchar i;
  for(i=0;i<8;i++)
    {if(led_display_data&0x80) SER_DATA_74HC595 =1;//判断数据最高位是0或1,并准备到595数据端
     else                      SER_DATA_74HC595 =0;
     CP_SR_74HC595=0;//时钟端上升沿将数据送入寄存器
     CP_SR_74HC595=1;
     led_display_data<<=1;//数据左移1位,为判断次高位做准备
    }
  CP_LA_74HC595 =0;//时钟端上升沿将寄存器中的数据送入锁存器
  CP_LA_74HC595 =1;
}
//=================================================================================================
// T1中断服务程序
//=================================================================================================
void T1_interrupt(void) interrupt 3
{ 
  TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
  TL1=0x00;
  t1_delay_time++;//在需要延时的地方清空并判断该变量
}
//=================================================================================================
//                           end of the file 
//=================================================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -