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

📄 12232.c

📁 这是5按键读U盘MP3的程序.采用ATmega32芯片.
💻 C
字号:
#include <iom32v.h>
#include <macros.h>
#include "1011.h"
#define  SS   0//LCD片选(串行) 0:禁止 1:允许
#define  MOSI 5//LCD输入串行数据(串行)
#define  SCK  7//LCD输入串行脉冲(串行)
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
    ;
  }
void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
void delay_nms(unsigned int n)       //N ms延时函数
  {
  unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }

void port_init(void)
{
  DDRB  = 0;//设置B口全为输入
  DDRC  = 0xff;//设置C口全为输入
  DDRD  = 0;//设置D口全为输入
  PORTB = 0xff;//设置B口全部上拉
  PORTC = 0xff;//设置C口全部上拉
  PORTD = 0xff;//设置D口全部上拉
}


void spi_send(unsigned char data)
{

   SPDR = data;                         // 启动spi
   while(!(SPSR & (1 << SPIF))); //      等待传输结束
}
//---------------------------------------------------
//  发送8位LCD控制命令
//--------------------------------------------------
void lcd_send_com(unsigned char com)
{

  PORTC |= (1 << SS);                   //SS=1,启动SPI
  spi_send(0xf8);                       //发送LCD控制命令
  spi_send(com & 0xf0);                 //发送高4位LCD控制命令
  spi_send(com << 4);                   //发送低4位LCD控制命令
  PORTC &= ~(1 << SS);                  //SS=0,关闭SPI
  if (com == 0x01)   delay_nms(80);     //1.6mS
  else delay_nus(200);                  //st7920要求等待72uS 
}

//--------------------------------------------------------
//   发送8位LCD显示数据
//-------------------------------------------------------
void lcd_send_data(unsigned char data)
{
  PORTC |= (1 << SS);                   //SS=1,启动SPI
  spi_send(0xfa);                       //发送LCD显示数据
  spi_send(data & 0xf0);                //发送高4位LCD显示数据
  spi_send(data << 4);                 //发送低4位LCD显示数据
  PORTC &= ~(1 << SS);                 //SS=0,关闭SPI
   delay_nus(200);                     //st7920要求等待72uS 
}

//---------------------------------------------------
//   LCD初始化设置
//---------------------------------------------------
void lcd_init(void)
{
  delay_nms(10);            //上电等待延时1000Ms 
  spi_init();                //SPI初始化
  lcd_send_com(0b00100000); //发送4位控制命令
  lcd_send_com(0b00000100); //发送进入点命令
  lcd_send_com(0b00001100); //发送开显示关光标命令
  lcd_send_com(0b00000001); //发送清除显示命令
  lcd_send_com(0b10000000); //发送设定DDRAM地址0x00命令
}
//------------------------------------------
//定位
//----------------------------------------
unsigned char set_lcd_position(unsigned char row, unsigned char col)
{
  if ((row < 2) && (col < 8))    //汉字字符为2行7.5列(汉字必须偶数对齐)
  {
    lcd_send_com(0x80 + row * 16 + col);//发送设定DDRAM地址row * 16 + col命令
    return 1;//成功返回
  }
  else
    return 0;//失败返回
}

//---------------------------------------------------
//显示字符串
//---------------------------------------------------
void lcd_display_string(unsigned char * string)
{
  while(*string) lcd_send_data(*string ++);
}
//------------------------------------------------------------------------------------
//在指定位置显示
//------------------------------------------------------------------------------------
void lcd_display(unsigned char row, unsigned char col, unsigned char * string)
{
  if (set_lcd_position(row, col))
  {
    lcd_display_string(string);
  }
}

⌨️ 快捷键说明

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