?? 液晶時鐘,串口調時.txt
字號:
c實例,液晶時鐘,串口調時- -
液晶時鐘,串口調時
head.h
#ifndef _TYPE
#define _TYPE
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef char INT8S;
typedef unsigned int INT16U;
typedef int INT16S;
typedef unsigned long INT32U;
typedef long INT32S;
#endif
main.h
#ifndef main_h //防止在同一模塊多次包含
#define main_h
#i nclude "head.h" //本工程公共頭文件
#i nclude <hidef.h> //系統頭文件,包含開關中斷
#i nclude <MC68HC908GP32.h> //芯片頭文件
#ifndef main_c
//*********主程序非靜態全局變量定義*************
extern unsigned char time[];
extern const unsigned char info[];
//自己模塊內的全局變量,公共函數聲明給其他模塊
http://www.pudn.com/downloads64/sourcecode/embed/detail224465.html
#else
//*********主程序自定義函數說明***
void init_con(void);
void init_timer1(void);
void init_sci(void);
//自己的私有函數和公共函數聲明給自己模塊
#endif
#endif
main.c
/*----------------------C語言示例-----------------------*
*硬件連接:PTA-HD44780data,PTC0-RS,PTC1-RW,PTC2-E *
*程序描述: 1.以串行中斷方式接收從PC機發送來的時鐘啟 *
* 動信號56H和時間值 *
* v11:11:11:11表示11:11:11 *
* 2.以定時中斷方式實現實現1秒的定時 *
* 3.以串行接受中斷方式接受從PC機發送來的時 *
* 鐘停止信號57H并向PC方發送當前的時鐘數據 *
*使用模塊: 定時模塊、串行通信模塊及LCD模塊 *
*作者: 劉玉宏 *
*版本 V1.0 *
*修改日期: 2005-6-11 *
*------------------------------------------------------*/
#define main_c
#i nclude "main.h" //本模塊頭文件
#i nclude "lcd.h" //其它模塊頭文件
#i nclude "interrupt.h" //其它模塊頭文件
//---------------主程序全局變量定義--------------------
unsigned char time[9]= "12:00:00";
const unsigned char info[17]= "HoHai university";
//----------------------------------------------------
void main(void)
{
DisableInterrupts; //禁止所有中斷
init_con(); //系統初始化
DDRA=0xff; //I/O初始化
DDRB=0xff;
DDRC=0x17;
init_timer1(); //定時器1初始化
init_sci(); //[SCI初始化]
Init_HD44780(0b00111100); //LCD初始化
print1L(time); //顯示時間初值
print2L(info); //顯示其它信息
EnableInterrupts; //開中斷
for(;;){
};
}
//===================================================================
//= 函數原型: void init_con(void)
//= 功 能: 系統配置及時鐘初始化
//= 參 數: 無
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void init_con(void)
{
}
//===================================================================
//= 函數原型: void init_timer1(void)
//= 功 能: 初始化定時器1
//= 參 數: 無
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void init_timer1(void)
{
T1SC=0b01100110; //01100110允許溢出中斷、
//不啟動計數、分頻因子=64
T1CNTH=0; //計數器初值清0
T1CNTL=0;
T1MODH=0x96; //設1秒產生1次溢出中斷
T1MODL=0; //模數寄存器設定值=
//1×(2457600/64)=$9600
}
//===================================================================
//= 函數原型: void init_sci(void)
//= 功 能: 初始化串口
//= 參 數: 無
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void init_sci(void)
{
//監控程序已初始化一部分
SCC2=0x2c; //設置接收中斷允許
}
lcd.h
#ifndef lcd_h //防止在同一模塊多次包含
#define lcd_h
#i nclude "head.h" //本工程公共頭文件
#i nclude <hidef.h> //系統頭文件,包含開關中斷
#i nclude <MC68HC908GP32.h> //芯片頭文件
#ifndef lcd_c
//*********全局變量,公共函數定義*************
void Init_HD44780(INT8U setting);
void print1L(INT8U *s);
void print2L(INT8U *s);
//自己模塊內的全局變量,公共函數聲明給其他模塊
#else
//*********本模塊自定義函數說明***
void DelaySub(INT16U i,INT16U vector);
void AsmDelay(INT8U delaytime);
void LCD_Command(INT8U cmd);
//自己的私有函數和公共函數聲明給自己模塊
#endif
#endif
lcd.c
#define lcd_c
#i nclude "main.h" //其它模塊頭文件
#i nclude "lcd.h" //本模塊頭文件
#i nclude "interrupt.h" //其它模塊頭文件
//===================================================================
//= 函數原型: void DelaySub(INT16U i,INT16U vector)
//= 功 能: 延時函數
//= 參 數: 為延時大小,vector為延時矢量
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void DelaySub(INT16U i,INT16U vector)
{
INT16U j;
INT16U x;
for(j=0;j<=i;j++)
for(x=0;x<=vector;x++);
}
//===================================================================
//= 函數原型: void AsmDelay(INT8U delaytime)
//= 功 能: 延時函數
//= 參 數: 為延時大小
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void AsmDelay(INT8U delaytime)
{
while(delaytime--) {
asm("NOP"); //1 cycles
asm("NOP"); //1 cycles
}
}
//===================================================================
//= 函數原型: void LCD_Command(INT8U cmd)
//= 功 能: 對A中指令使用PORTB作為輸出口,
// 到LCD進行命令執行或字符顯示
//= 參 數: cmd,執行的指令,8位
//= 返 回 值: 無
//= 函數性質:私有函數
//===================================================================
void LCD_Command(INT8U cmd)
{
AsmDelay(15); //等待約40us
PTB=cmd; //把指令碼送到B口
asm("NOP");
asm("NOP");
PTC|=0b00000100; //LCD開始接受數據,置使能位為1
asm("NOP");
asm("NOP");
PTC&=0b11111011; //LCD結束接受數據,置使能位為0
AsmDelay(15); //等待約40us
}
//===================================================================
//= 函數原型: void Init_HD44780(INT8U setting)
//= 功 能: 初始化HD44780
//= 參 數: "HD44780功能"設置命令
//= 返 回 值: 無
//= 函數性質:公有函數
//===================================================================
void Init_HD44780(INT8U setting)
{
PTC&=0b11111110; //令LCD的RS=0,R/W=0,
//進行LCD初始化
PTC&=0b11111101;
//功能設置:數據接口,顯示行數,點陣模式
//00111000:8位數據接口,2行顯示,5*7點陣模式
//00110100:8位數據接口,1行顯示,5*10點陣模式
LCD_Command(setting);
//顯示開關控制:關顯示,關光標顯示,不閃爍
LCD_Command(0b00001000);
AsmDelay(15); //等待約40us
PTC&=0b11111110; //RS,RW清零開始清屏
PTC&=0b11111101;
LCD_Command(0b00000001); //清屏指令
DelaySub(1,0x200); //等待清屏完畢,時間>1.6ms
//輸入方式設置:數據讀寫操作后,
//AC自動增1顯示不動,光標左移
LCD_Command(0b00000110);
//光標移位設置:光標右移一個字符位,AC自動加1
LCD_Command(0b00010100);
//顯示開關設置:開顯示,關光標顯示,不閃爍
LCD_Command(0b00001100);
}
//===================================================================
//= 函數原型: void print1L(INT8U *s)
//= 功 能: HD44780第一行顯示
//= 參 數: 欲顯示的字符串
//= 返 回 值: 無
//= 函數性質:公有函數
//===================================================================
void print1L(INT8U *s)
{
INT8U i;
i=0;
PTC&=0b11111110;
PTC&=0b11111101;
LCD_Command(0b10000000);
while(*s&&i<16){
PTC|=0b00000001; //令LCD的RS=1,R/W=0,
//寫入數據到DD RAM中
PTC&=0b11111101;
LCD_Command(*s); //將要顯示的字符串
//分個送到LCD
s++;
i++;
}
}
//===================================================================
//= 函數原型: void print2L(INT8U *s)
//= 功 能: HD44780第二行顯示
//= 參 數: 欲顯示的字符串
//= 返 回 值: 無
//= 函數性質:公有函數
//===================================================================
void print2L(INT8U *info)
{
INT8U i;
i=0;
PTC&=0b11111110;
PTC&=0b11111101;
LCD_Command(0b11000000);
i=0;
//如果超過16個字符,將字符全部送完
while(info&&i<16){
PTC|=0b00000001; //令LCD的RS=1,R/W=0,
//寫入數據到DD RAM中
PTC&=0b11111101;
LCD_Command(info);
i++;
}
}
interrupt.h
#define lcd_c
#i nclude "main.h" //其它模塊頭文件
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -