demoa-16sm._c

来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· _C 代码 · 共 140 行

_C
140
字号
/*
Title:	DEMOA-16sm.c
Connection:
	  Factory fixed setting:
	  PORTA:
	  		PA0-PA2 LCD control
			PA3-PA7 4x7-segment display control
			Drive LED group2 (the right group of LED)
	  PORTB:
	  		Shared by LCD and 4x7-segment displays
	  		output 8-bit data to LCD or 8-bit data to 4x7-segment displays
	  PORTC:
	        shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
			receive inputs from dipswitch, touch switches and buttons 				
	  PORTD: 
	  		Drive LED group1 (the left group of LED) 
Attention:
	  1. J12 should be capped (connectted)
	  2. J5 is the Jump for LCD back light power 	  

*/

#include <iom16v.h>
#include <macros.h>
#include <stdlib.h>

// external symbols defined in LCD-avr-sm.c
extern unsigned char lcd_enable, lcd_disable;
extern unsigned char in_instr_wr, in_data_wr;
extern unsigned char in_instr_rd, in_data_rd;
extern void wr_instruction(unsigned char instr);
extern void wr_data(unsigned char data);
extern int indexhead, indextail, indexcount;
extern int cursor_index;
extern unsigned char swin, swin2;
extern const char message1[];
extern const char message2[]; 
extern const char message3[];
extern const char message4[];
extern const char message5[];
extern const char message6[];
extern const char message7[];
extern const char message8[];

extern void port_init(void);
extern void WDT_off(void);
extern void lcd_delay(int count);
extern void ldelay(int ms);
extern void wr_instruction(unsigned char instr);
extern void wr_data(unsigned char data);
extern void wr_instruction2(unsigned char instr);
extern void wr_data2(unsigned char data);
extern void cursor_home(void);			
extern void cursor_line1(void);		  
extern void cursor_line2(void);		
extern void space(void);				  
extern void out_string(const char array[]); 
extern void lcd_on(void);

// External symboles defined in SegDisp-avr-fn.c

extern const char dig0, dig1, dig2, dig3, dot;
extern char segconv[];
extern unsigned char BCD0, BCD1, BCD2, BCD3;
extern int count;

//extern void port_init(void);
extern void delay(int count);
extern void BinToBCD(int data);
extern void dispseg(void);

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void main(void)
{
 unsigned char data, pfin, dark, darkfg=0xff;
 int i=0;
 unsigned char j, jsave, array1[10];
 int a;
 CLI();
 port_init();
 WDT_off();
 ldelay(200);
 lcd_on();
 PORTD=0x50;
 ldelay(50);
 PORTD=0x05;
 ldelay(50);
 out_string(message1);
 cursor_line2();
 out_string(message2);
 PORTD=0x55;
 PORTA=0xF8;
 PORTB=0x00;
 ldelay(100);

 while(1)
 {
  WDR();
  swin=PINC&0x30;
  swin=(swin>>4)&0x03;
  if(swin2!=swin)
    {
	 swin2=swin;
  	 if(swin==0x00)
      {
	  cursor_home();
	  out_string(message1);
 	  cursor_line2();
 	  out_string(message2);
	  }
  	 else if(swin==0x01)
      {
	  cursor_home();
	  out_string(message3);
 	  cursor_line2();
 	  out_string(message4);
	  }
     else if(swin==0x02)
      {
	  cursor_home();
	  out_string(message5);
 	  cursor_line2();
 	  out_string(message6);
	  }
     else
      {
	  cursor_home();
	  out_string(message7);
 	  cursor_line2();
 	  out_string(message8);
	  }		
	}
	swin=PINC;
	BinToBCD(swin);
	dispseg();	
  }
} 

⌨️ 快捷键说明

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