📄 ch452_lcd.c~
字号:
/*****************************************************
编译器:CodeWizardAVR V1.25.3 Professional
Project : LCD12864(ST7920)Driver
Version : 1.0
Date : 2007-8-18
Author :
Company :
Comments:
Chip type : ATmega16L
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
液晶:12864
控制器:ST7920
与单片机连接方式:串行连接 【液晶PSB脚(15脚)接低】
液晶CS ----> PB.0
液晶SID ----> PB.1
液晶SCLK ----> PB.2
键盘控制芯片CH452与单片机连接关系:
CH452 时钟端口SCL ----> PC.0
CH452 数据端口SDA ----> PC.1
CH452 中断端口INT ----> PD.2
*****************************************************/
#include "mega16.h"
#include "Delay.H"
#include "CH452.h"
#define uchar unsigned char
#define uint unsigned int
#define xtal 8
#define Set_CS() DDRB.0=1;PORTB.0=1
#define Set_SID() DDRB.1=1;PORTB.1=1
#define Set_SCLK() DDRB.2=1;PORTB.2=1
#define Clr_CS() DDRB.0=1;PORTB.0=0
#define Clr_SID() DDRB.1=1;PORTB.1=0
#define Clr_SCLK() DDRB.2=1;PORTB.2=0
#define SID_PIN_IN() DDRB.1 = 0;
#define CLK_PIN_OUT() DDRB.2 = 1;
#define CS_PIN_OUT() DDRB.0 = 1;
#define CLR_CLK() PORTB.2 = 0;
#define SET_CLK() PORTB.2 = 1;
#define SID_PIN PINB.1 //read pinx, not port!
//==============================函数声明=================================
void Delay(uint ms);
void W_1byte(uchar RW, uchar RS, uchar W_data);
void Write_8bits(uint W_bits);
void LCD_Init(void);
void LCD_Clear(void);
void LCD_set_xy(uchar x, uchar y);
void LCD_Display(uchar *message);
void input(void);
void save(void);
void print_root_page(void);
void print_sub1_page(void);
void print_sub2_page(void);
void print_sub3_page(void);
void print_sub4_page(void);
void print_sub1_1_page(void);
void print_sub1_2_page(void);
void print_sub4_1_page(uint X,uint Y);
void showXY(uint position_x,uint position_y);
void Draw_Pic(uchar x, uchar y, flash uchar *Draw);
void Draw_Pic_Clear(void);
void Draw_Pic_Logo(flash uchar *Draw);
void Draw_Pic_LogoBar(void);
//==============================变量定义==================================
//uchar mynew1[]={"7920_3wires_demo"};
//uchar mynew2[]={"Create by:储振斌"};
//uchar mynew2[]={"欢迎进入系统"};
//uchar mynew3[]={"E_mail:chuzhenbi"};
//uchar mynew4[]={"n@163.com"};
uchar menu[]={"系统控制菜单"};
uchar menu1[]={"1.设置"};
uchar menu2[]={"2.画图"};
uchar menu3[]={"3.寻迹"};
uchar menu4[]={"4.监控"};
uchar menu5[]={"5.关于"};
uchar menu6[]={"6.帮助"};
uchar menu10[]={"设置菜单"};
uchar menu11[]={"1.起始坐标设置"};
uchar menu12[]={"2.半径设置"};
uchar menu20[]={"画图菜单"};
uchar menu21[]={"1.直线"};
uchar menu22[]={"2.矩形"};
uchar menu23[]={"3.圆形"};
uchar menu30[]={"寻迹菜单"};
uchar menu31[]={"1.寻迹"};
uchar menu40[]={"监控菜单"};
uchar menu41[]={"1.监控"};
uchar label_x_position[]={"X 坐标:"};
uchar label_y_position[]={"Y 坐标:"};
uchar label_banjing[]={"半径:"};
uchar OK[]={"设定成功!"};
uchar temp[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar input_position,input_banjing; //输入坐标位置使能,输入半径使能
uchar count; //设定坐标、半径值时记录输入数字个数用
uchar menu_statu=100; //当前所处菜单位置记录
uchar monitor;
uint X,Y; //存放当前坐标值
uint x_position,y_position; //存放设定的坐标值以供调用
uint banjing; //存放设定的半径值以供调用
uint temp_x_position,temp_y_position,temp_banjing,postion;
/////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表 //
// 图片: C:\..面\未命名.bmp,横向取模左高位,数据排列:从左到右从上到下 //
// 图片尺寸: 128 * 32 //
/////////////////////////////////////////////////////////////////////////
flash uchar qidong[] = // 数据表
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x31,0x80,0x00,0x00,0x06,0x00,0x06,0x00,0x00,0xC0,0x00,0x00,
0x00,0x00,0xFF,0x80,0x30,0xD8,0x00,0x18,0x06,0x00,0x03,0x30,0x00,0xC0,0x00,0x00,
0x00,0x00,0x06,0x00,0x67,0xFC,0xFF,0xFC,0x0C,0x18,0x7F,0xF8,0xFC,0xC0,0x00,0x00,
0x00,0x00,0x0C,0x60,0x78,0xC0,0x03,0x01,0xFF,0xFC,0x60,0x30,0x00,0xD8,0x00,0x00,
0x00,0x00,0x3F,0xC0,0xD9,0x80,0x03,0x00,0x18,0x00,0x60,0x30,0x03,0xFC,0x00,0x00,
0x00,0x00,0x07,0x01,0xF3,0x30,0x33,0x00,0x31,0x80,0x7F,0xF1,0xFE,0xD8,0x00,0x00,
0x00,0x00,0x0C,0x60,0x37,0xF8,0x33,0x30,0x31,0x80,0x60,0x00,0x30,0xD8,0x00,0x00,
0x00,0x00,0x7F,0xF0,0x63,0x60,0x33,0xF8,0x71,0x80,0x60,0x00,0x30,0xD8,0x00,0x00,
0x00,0x00,0x03,0x19,0xFB,0x60,0x33,0x00,0xFF,0xF8,0x7F,0xF0,0x6C,0xD8,0x00,0x00,
0x00,0x00,0x1B,0xC0,0xC3,0x60,0x33,0x01,0xB1,0x80,0x78,0x30,0xCD,0x98,0x00,0x00,
0x00,0x00,0x33,0x60,0x3B,0x60,0x33,0x00,0x31,0x80,0x78,0x31,0xFF,0x98,0x00,0x00,
0x00,0x00,0x63,0x39,0xE3,0x6C,0x33,0x00,0x31,0x80,0x78,0x30,0xC3,0x18,0x00,0x00,
0x00,0x00,0xCF,0x18,0xC6,0x6C,0x33,0x18,0x31,0x80,0xDF,0xF0,0x06,0x78,0x00,0x00,
0x00,0x00,0x06,0x00,0x1C,0x3D,0xFF,0xFC,0x3F,0xFD,0x98,0x30,0x0C,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表 //
// 图片: C:\..p\bitlogo.bmp,横向取模右高位,数据排列:从左到右从上到下 //
// 图片尺寸: 128 * 64 //
/////////////////////////////////////////////////////////////////////////
flash uchar hehai[] = // 数据表
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x3F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC6,0x3F,0xFF,
0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xC6,0x3F,0xFF,
0xFF,0xF8,0x7F,0xFF,0xFF,0xF3,0x83,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x44,0x3F,0xFF,
0xFF,0xFC,0x3F,0xFF,0xFF,0xF1,0x00,0x7F,0xFF,0xFC,0x3F,0xFF,0xFC,0x44,0x7F,0xFF,
0xFF,0xFC,0x3F,0xFF,0xFF,0xF0,0x00,0x7F,0xFF,0xFC,0x3F,0xFF,0xFC,0x60,0x7F,0xFF,
0xFF,0xF0,0x3F,0xC0,0xFF,0xF8,0x00,0x7F,0xFF,0xFE,0x3F,0xFF,0xFC,0x30,0xFF,0xFF,
0xFF,0xE7,0xE0,0x00,0x7F,0xF0,0x01,0xFF,0xFF,0xFC,0x3F,0xFF,0xFC,0x00,0x0F,0xFF,
0xFF,0xCF,0x00,0x18,0xFF,0x80,0x03,0xFF,0xFF,0xFC,0x01,0xFF,0xFC,0x00,0x47,0xFF,
0xFF,0xC6,0x01,0x1F,0xFF,0x94,0xE4,0xFF,0xFF,0xFC,0x00,0xFF,0xF0,0x03,0x03,0xFF,
0xFF,0xC7,0x1F,0x1F,0xFF,0x9C,0xE0,0x7F,0xFF,0xFC,0x01,0xFF,0xE1,0x1E,0x03,0xFF,
0xFF,0xC3,0x60,0x1F,0xFF,0x98,0xC0,0x3F,0xFF,0xF8,0x07,0xFF,0xE4,0xF0,0x1F,0xFF,
0xFF,0xE2,0x40,0x1F,0xFF,0x89,0xC2,0x3F,0xFF,0xF0,0x1F,0xFF,0xE3,0x80,0x7F,0xFF,
0xFF,0xF2,0x00,0x1F,0xFF,0x89,0x82,0x3F,0xFF,0x80,0x3F,0xFF,0xC3,0x00,0x7F,0xFF,
0xFF,0xE2,0x00,0x9F,0xFF,0x91,0x80,0x07,0xFF,0x00,0x7F,0xFF,0xC7,0x00,0xFF,0xFF,
0xFF,0xE0,0x80,0x9F,0xFF,0x90,0x00,0x07,0xFF,0x00,0xFF,0xFF,0xC7,0xE1,0xFF,0xFF,
0xFF,0xE4,0xC0,0x9F,0xFF,0x80,0x00,0x23,0xFF,0x80,0xFF,0xFF,0xC7,0xE0,0x3F,0xFF,
0xFF,0xE0,0xC1,0x9F,0xFF,0x80,0x04,0x3F,0xFF,0xE1,0xFF,0xFF,0xCF,0x80,0x1F,0xFF,
0xFF,0xF8,0xFF,0x9F,0xFF,0xA0,0x00,0x1F,0xFF,0xE0,0x03,0xFF,0xEE,0x00,0x1F,0xFF,
0xFF,0xC1,0xFF,0x9F,0xFF,0x84,0x00,0x0F,0xFF,0xE1,0xC0,0xFF,0xFC,0x00,0x3F,0xFF,
0xFF,0xE1,0xFF,0x9F,0xFF,0x80,0x3C,0x0F,0xFF,0xC3,0xE0,0x3F,0xFC,0x78,0x7F,0xFF,
0xFF,0xE1,0xFB,0x9F,0xFF,0x84,0xD8,0x6F,0xFE,0x83,0xF0,0x3F,0xFC,0xFC,0xFF,0xFF,
0xFF,0xF1,0xF8,0x1F,0xFF,0x87,0xC0,0x7F,0xFC,0x07,0xF8,0x3F,0xFE,0xF8,0xFF,0xFF,
0xFF,0xF1,0xFC,0x1F,0xFF,0xC7,0xE0,0xFF,0xFC,0x1F,0xFE,0x3F,0xFF,0x18,0xFF,0xFF,
0xFF,0xFB,0xFE,0x1F,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x81,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x43,0xFF,0xFF,0x3F,0x38,0xFF,0xFC,0x0F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0x33,0x3F,0x3E,0x7F,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x00,0x7F,0x33,0x3F,0x3C,0x1F,0x9F,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF0,0xFE,0x7F,0x33,0x3F,0x21,0xFF,0x9F,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF2,0x00,0xFC,0x01,0x3F,0x0E,0x3F,0x93,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF2,0x67,0xFC,0x00,0x3C,0x33,0x9F,0x98,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x0F,0xFC,0x00,0x3F,0x26,0x7F,0x9C,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC1,0xF9,0x33,0x3E,0x12,0x7F,0x98,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x09,0xFF,0x33,0x3C,0x08,0x7F,0x93,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x49,0xFE,0x73,0x39,0x3C,0xFF,0x87,0x9F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x41,0xFE,0x73,0x3F,0x38,0x7F,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x49,0xFC,0xFF,0x3F,0x33,0x1F,0x80,0x0F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xCF,0xF9,0xFF,0x3F,0x07,0x87,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
//==============================主函数======================================
void main(void)
{
Clr_CS();
Clr_SID();
Clr_SCLK();
LCD_Init();
//启用外部中断0
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
CH452_Display_Init();
Draw_Pic_Clear(); //画图方式清屏
Draw_Pic_Logo(qidong); //启动画面
Draw_Pic_LogoBar(); //进度条
LCD_Clear();//清屏
Draw_Pic(0,0,hehai); //显示河海大学开机图片
Delay(300);
W_1byte(0,0,0x30); //关闭绘图模式,进入字符模式
print_root_page(); //显示主菜单
#asm("sei")
while (1)
{
if(monitor==1)
print_sub4_1_page(X,Y);
}
}
/*******************************************************************
函 数 名:CH452_I2C_Start
入口参数:无
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:CH452虚拟I2C总线开始部分代码。
说 明:当用虚拟I2C总线读或写时首先调用这个函数。
********************************************************************/
void CH452_I2C_Start(void)
{
CH452_SDA_PORT |= CH452_SDA_PINNum; //SDA 输出高电平
CH452_SCL_PORT |= CH452_SCL_PINNum; //SCL 输出高电平
delay_us(5);
CH452_SDA_PORT &= ~CH452_SDA_PINNum; //SDA 输出低电平,产生启动信号;
delay_us(5);
CH452_SCL_PORT &= ~CH452_SCL_PINNum; //SCL 输出低电平,启动完成;
delay_us(5);
}
/*******************************************************************
函 数 名:CH452_I2C_Stop
入口参数:无
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:CH452虚拟I2C总线结束部分代码。
说 明:当用虚拟I2C总线读或写完成时调用这个函数。
********************************************************************/
void CH452_I2C_Stop(void)
{
CH452_SDA_PORT &= ~CH452_SDA_PINNum; //SDA置低
delay_us(5);
CH452_SCL_PORT |= CH452_SCL_PINNum; //SCL恢复高电平
delay_us(5);
CH452_SDA_PORT |= CH452_SDA_PINNum; //SDA恢复高电平
delay_us(5);
}
/*******************************************************************
函 数 名:CH452_I2C_WrOneByte
入口参数:c ------ 要写入的一个字节数据。
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于虚拟I2C总线向外围器件写入一个字节操作。
说 明:
********************************************************************/
void CH452_I2C_WrOneByte(uchar c)
{
uchar i;
for(i=0;i<8;i++) //输出8位数据
{
if(c&0x80)
CH452_SDA_PORT |= CH452_SDA_PINNum; //数据为1,置高SDA
else
CH452_SDA_PORT &= ~CH452_SDA_PINNum; //数据为0,置低SDA
CH452_SCL_PORT |= CH452_SCL_PINNum; //向SCL 输出高电平脉冲
c<<=1; //准备输出下一位
delay_us(5);
delay_us(5);
CH452_SCL_PORT &= ~CH452_SCL_PINNum;
delay_us(5);
delay_us(5);
}
delay_us(5);
CH452_SDA_PORT |= CH452_SDA_PINNum; //将SDA 恢复为高电平
CH452_SCL_PORT |= CH452_SCL_PINNum; //将SCL 恢复为高电平
delay_us(5);
delay_us(5);
CH452_SCL_PORT &= ~CH452_SCL_PINNum; //SCL置低
delay_us(5);
delay_us(5);
}
/*******************************************************************
函 数 名:CH452_I2C_Write
入口参数:command ------ 要写入的命令或数据。
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于虚拟I2C总线向外围器件写入一个命令或数据操作。
说 明:
********************************************************************/
void CH452_I2C_Write(uint command)
{
CH452_I2C_Start(); //开始向I2C总线输出
CH452_I2C_WrOneByte(((uchar)(command>>7)&0x3E)|0x60); //输出标志符
CH452_I2C_WrOneByte((uchar)command); //输出命令字节
CH452_I2C_Stop(); //命令输出结束
}
/*******************************************************************
函 数 名:CH452_I2C_RdOneByte
入口参数:
出口参数:读到的数据。
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于从虚拟I2C总线读入一个字节操作。
说 明:
********************************************************************/
uchar CH452_I2C_RdOneByte(void)
{
uchar c,i;
c=0;
for(i=0;i<8;i++)
{
CH452_SDA_PORT |= CH452_SDA_PINNum; //SDA置高
CH452_SCL_PORT |= CH452_SCL_PINNum; //SCL置高
delay_us(1);
delay_us(1);
c<<=1;
CH452_SDA_DDR &= ~CH452_SDA_PINNum; //SDA为输入
if(PINC&CH452_SDA_PINNum)c|=0x01; //如果输入的字符是1,c的当前位置1
CH452_SCL_PORT &= ~CH452_SCL_PINNum; //否则置0
delay_us(1);
delay_us(1);
}
delay_us(1);
CH452_SDA_PORT |= CH452_SDA_PINNum; // 发出无效应答
CH452_SCL_PORT |= CH452_SCL_PINNum;
delay_us(1);
delay_us(1);
CH452_SDA_DDR |= CH452_SDA_PINNum;
return(c);
}
/*******************************************************************
函 数 名:CH452_I2C_Read
入口参数:
出口参数:读到的数据。
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于从虚拟I2C总线读入数据操作。
说 明:
********************************************************************/
uchar CH452_I2C_Read()
{
uchar key;
CH452_I2C_Start(); //开始向I2C总线输出
CH452_I2C_WrOneByte(0x6f); //输出标志符
key=CH452_I2C_RdOneByte(); //从总线读取一个字节
CH452_I2C_Stop(); //读操作完成
return(key); //返回键值
}
/*******************************************************************
函 数 名:CH452_Display_Init
入口参数:
出口参数:
建立日期:2007年8月15日
修改日期:
函数作用: 数码管显示的初始化。
说 明:
********************************************************************/
void CH452_Display_Init()
{
CH452_SDA_DDR |= CH452_SDA_PINNum;
CH452_SCL_DDR |= CH452_SCL_PINNum;
CH452_INT_DDR &= ~CH452_INT_PINNum;
CH452_INT_PORT |= CH452_INT_PINNum;
CH452_I2C_Write(CH452_RESET); //复位显示
delay_us(30);
CH452_I2C_Write(CH452_BCD); //设置显示方式
CH452_I2C_Write(CH452_SYSON2); //打开显示和键盘
//CH452_I2C_Write(CH452_TWINKLE|0xff);
CH452_I2C_Write(0x0909);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -