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

📄 new_disp.c

📁 我学习AVR的代码例子
💻 C
字号:
#include "iom88v.h"

#define SS PB2
#define MOSI PB3
#define SCK PB5

#define _asm asm
#define WDR() 	asm("wdr")
#define SEI()	asm("sei")
#define CLI()	asm("cli")

#define a1 0x04
#define a2 0x0c
#define a3 0x14
#define a4 0x1c
#define a5 0x24
#define a6 0x2c
#define a7 0x34
#define a8 0x3c
#define a9 0x44

const char S[11]={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};

void port_init(void)//口方向设置
 {  
   DDRB  = 0xff;
   DDRC = 0X00;
   PORTC=0xff;
   DDRD  = 0x00;
   PORTD=0xff;
 }
void delay_us(int time)//微秒级延时程序
 {     
   do
	 {
	   time--;
	 }	
   while (time>1);
 }	   
void delay_ms(unsigned int time)//毫秒级延时程序
 {
   while(time!=0)
	 {		
	   delay_us(1000);
	   time--;
	 }
 }/*
void Delay()
 {
   unsigned char i;
   for(i=0;i<10;i++); /*用于调整CLK 脉冲宽度*/
 //}
void SendBit(unsigned char dat,unsigned char bitcnt)
 {
   unsigned char i;
   CLI();
   for(i=0;i<bitcnt;i++)
     {
       if(( dat & 0X80 ) == 0)
       PORTB &=(~(1<<MOSI));
       else
       PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
       //Delay();
	   delay_us(10);
       PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
       //Delay();
	   delay_us(10);
       PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
       dat=dat<<1; /*发送数据左移一位*/
     }
   SEI();
 }

void Start_spi()
 {
   PORTB |=(1<<SS);
   PORTB |=(1<<SCK);
   PORTB |=(1<<MOSI);
   //Delay();
   delay_us(10);
   PORTB &=(~(1<<SS));PORTB &=(~(1<<SS));
   PORTB &=(~(1<<SCK));PORTB &=(~(1<<SCK));
 }

void SendByte(unsigned char dat)
 {
   SendBit(dat,8); /*发送字节*/
 }

void SENDCOMA(unsigned char com)
 {
   Start_spi();
   SendBit(0X80,4); //*发送设置命令ID=100 0*
   SendByte(com); //*发送命令字*
 }

void SENDCOMB(unsigned char adr)
 {
   Start_spi();
   SendBit(0XA0,3); /*发送写显示RAM 命令ID=101 */
   SendBit(adr,6); /*指定写入地址*/
 } 
void disp_init(void)
 {
   unsigned char i;
   SENDCOMA(0X0a); /*禁止WDT溢出标志输出*/
   SENDCOMA(0X52); //设置偏压,背极数 定义1/3 偏压4背极
   SENDCOMA(0X30); //*使用内部256KRC 振荡器*
   SENDCOMA(0X02); //*启动振荡器*    
   SENDCOMA(0X06); //LCDON
   SENDCOMA(0X08);//timer dis
   SENDCOMB(0x00); //*把数据指针指回0 接着写入数据*   
   for(i=0;i<15;i++) /*写入16 字节数据*/
     {
       SendByte(0x0); /*写入数据*/
     }
 }
void disp_off(void)
  {
    SENDCOMA(0X04);//lcdoff
    SENDCOMA(0X00);//sys dis
    //SENDCOMA(0X0c);//timer en
  }
void disp(char add,char dat)
 {
   switch(add)
     {
	   case 1: add=a1;break;
	   case 2: add=a2;break;
	   case 3: add=a3;break;
	   case 4: add=a4;break;
	   case 5: add=a5;break;
	   case 6: add=a6;break;
	   case 7: add=a7;break;
	   case 8: add=a8;break;
	   case 9: add=a9;break;
	 }
   SENDCOMB(add);             //write address
   SendByte(S[dat]);            //write data
   //SendByte(S[dat]);            //write data
 }
void main(void)
  {
    char i,j;
    port_init();
	disp_init();
	for(i=1,j=1;i<10;i++,j++) disp(i,j);
	//disp(2,3);
	while(1);
  }

⌨️ 快捷键说明

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