#ifndef _exint0_h_
#define _exint0_h_
void exint0_init(void);
#endif
5.4 定时器T0
#include /** * @brief 定时器0初始化,1毫秒@11.0592MHz * @param 无 * @retval 无 */ void timer0_init(void) //1毫秒@11.0592MHz { TMOD &= 0xF0; //设置定时器模式,1111_0000,&,高四位保留,低四位清零 TMOD |= 0x01; //设置定时器模式,0000_0001,|,高四位保留,设置模式为T0 TL0 = 0; //设置定时初始值 TH0 = 0; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 0; //定时器0暂时不计时 } void timer0_SetCounter(unsigned int value) { TH0=value/256; TL0=value%256; } unsigned int timer0_GetCounter(void) { return (TH0<<8)|TL0; } void timer0_Run(unsigned char Flag) { TR0=Flag; } #ifndef _timer0_h_ #define _timer0_h_ void timer0_init(void); void timer0_SetCounter(unsigned int value); unsigned int timer0_GetCounter(void); void timer0_Run(unsigned char Flag); #endif 5.5 LCD1602显示函数 #include #include 'intrins.h' //引脚配置,硬件原理图,普中A2 sbit LCD1602_RS = P2^6; sbit LCD1602_RW = P2^5; sbit LCD1602_E = P2^7; #define LCD1602_DATAPORT P0 /** * @brief LCD1602延时函数 * @param xms=1, 延时1ms * @retval 无 */ void LCD1602_Delayms(unsigned char xms) //@11.0592MHz { unsigned char i, j,k; for(k=0;k _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } /** * @brief LCD1602写命令,时序图 * @param Command 要写入的命令 * @retval 无 */ void LCD1602_WriteCommand(unsigned char Command) { LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPORT = Command; LCD1602_E = 1; LCD1602_Delayms(1); //延时1ms LCD1602_E = 0; LCD1602_Delayms(1); //延时1ms } /** * @brief LCD1602写数据,时序图 * @param Data 要写入的数据 * @retval 无 */ void LCD1602_WriteData(unsigned char Data) { LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPORT = Data; LCD1602_E = 1; LCD1602_Delayms(1); //延时1ms LCD1602_E = 0; LCD1602_Delayms(1); //延时1ms } /** * @brief LCD1602初始化函数 * @param 无 * @retval 无 */ void LCD1602_Init(void) { LCD1602_WriteCommand(0x38); //0011_1000 功能设置,设置16x2显示,5x7点阵,8位数据接口 LCD1602_WriteCommand(0x0C); //0000_1100 显示开关控制,显示开,光标关,闪烁关 LCD1602_WriteCommand(0x06); //0000_0110 输入方式设置,数据写后,AC自动加一,画面不动 LCD1602_WriteCommand(0x01); //0000_0001 清屏,数据指针清零、所有显示清零 } /** * @brief LCD1602设置光标位置 * @param Line 行位置,范围:1~2 * @param Column 列位置,范围:1~16 * @retval 无 */ void LCD1602_SetCursor(unsigned char Line,unsigned char Column) { if(Line == 1) { LCD1602_WriteCommand(0x80|(Column-1)); //设置要存入数据的DDROM地址,第一行地址 } else { LCD1602_WriteCommand(0x80|(Column-1)+0x40); //设置要存入数据的DDROM地,第二行地址 } } /** * @brief 在LCD1602指定位置上显示一个字符 * @param Line 行位置,范围:1~2 * @param Column 列位置,范围:1~16 * @param Char 要显示的字符 * @retval 无 */ void LCD1602_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char) { LCD1602_SetCursor(Line,Column); LCD1602_WriteData(Char); } /** * @brief 在LCD1602指定位置上显示所给字符串 * @param Line 行位置,范围:1~2 * @param Column 列位置,范围:1~16 * @param Char 要显示的字符串 * @retval 无 */ void LCD1602_ShowString(unsigned char Line,unsigned char Column,unsigned char *String) //指针 { unsigned char i; LCD1602_SetCursor(Line,Column); for(i=0;String[i]!='