delay_ms(5); LCD_write_com(0x01); delay_ms(5);
LCD_write_com(0x06); delay_ms(5);
//显示清屏 //显示光标移动设置
LCD_write_com(0x0C); //显示开及光标设置 delay_ms(5); }
//*********************************************************************** // 主函数
//*********************************************************************** void main(void) {
unsigned char temp;
WDT_Init(); //看门狗初始化 Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
Close_LED(); //关闭LED数码管,避免显示乱码 delay_ms(200);
LCD_init(); //1602液晶初始化 DS1302_init(); //DS1302初始化 delay_ms(10);
DS1302_write_time(); //向DS1302写初始数据,如年月和时间等
while (1) {
delay_ms(200);
DS1302_read_time(); //读DS1302数据 temp = (time_buf[0] >> 4) + '0'; //在LCD上写要显示的数据 LCD_write_char(0, 0, temp);/*年*/ temp = (time_buf[0] & 0x0F) + '0'; LCD_write_char(1, 0, temp); temp = (time_buf[1] >> 4) + '0'; LCD_write_char(2, 0, temp); temp = (time_buf[1] & 0x0F) + '0'; LCD_write_char(3, 0, temp); LCD_write_char(4, 0, '-');
temp = (time_buf[2] >> 4) + '0';
LCD_write_char(5, 0, temp);/*月*/ temp = (time_buf[2] & 0x0F) + '0'; LCD_write_char(6, 0, temp);
LCD_write_char(7, 0, '-');
temp = (time_buf[3] >> 4) + '0';
LCD_write_char(8, 0, temp);/*日*/ temp = (time_buf[3] & 0x0F) + '0'; LCD_write_char(9, 0, temp);
temp = (time_buf[4] >> 4) + '0'; LCD_write_char(8, 1, temp);/*时*/ temp = (time_buf[4] & 0x0F) + '0'; LCD_write_char(9, 1, temp); LCD_write_char(10, 1, ':');
temp = (time_buf[5] >> 4) + '0';
LCD_write_char(11, 1, temp);/*分*/ temp = (time_buf[5] & 0x0F) + '0'; LCD_write_char(12, 1, temp); LCD_write_char(13, 1, ':');
temp = (time_buf[6] >> 4) + '0';
LCD_write_char(14, 1, temp);/*秒*/ temp = (time_buf[6] & 0x0F) + '0'; LCD_write_char(15, 1, temp); } }
12、INFRARED-遥控器红外一体化解码测试程序
/********************************************************************
//DM430-A型开发板红外遥控器解码程序,对遥控器按键进行识别,然后将键值显示到数码管上
//红外遥控器为NEC编码格式,38K调制,解码时直接读取键值,用户码00FF
//由于采取的是IO电平直接判断方式读取,会有不稳定的现象,按键时频率不要过快 ********************************************************************/
#include
#include \ //开发板配置头文件,主要配置IO端口信息
//*********************************************************************** // 遥控器键码
//***********************************************************************
#define KEY_0 0x16 //键0 #define KEY_1 0x0C //键1
#define KEY_2 0x18 //键2 #define KEY_3 0x5E //键3 #define KEY_4 0x08 //键4 #define KEY_5 0x1C //键5 #define KEY_6 0x5A //键6 #define KEY_7 0x42 //键7 #define KEY_8 0x52 //键8 #define KEY_9 0x4A //键9 #define KEY_POWER 0x45 //电源 #define KEY_MODE 0x46 //模式 #define KEY_SOUND 0x47 //静音
#define RED_IN P1DIR &= ~BIT3 //设置输入,红外接收头接单片机PE3口 #define RED_OUT P1DIR |= BIT3 //设置输出 #define RED_L P1OUT &= ~BIT3 //置低电平 #define RED_H P1OUT |= BIT3 //置高电平 #define RED_R (P1IN & BIT3) //读电平
uchar KEY_VAL=0; uchar code_value=0; uchar key_code[4];
//*********************************************************************** // MSP430IO口初始化
//*********************************************************************** void Port_Init() {
LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF
DATASEL = 0x00; //设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; //设置IO口方向为输出 DATAPORT = 0xFF; //P4口初始设置为FF
CTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FF
P6SEL = 0x00; //设置IO口为普通I/O模式,此句可省 P6DIR |= BIT2; //设置P62方向为输出 P6OUT = 0xFF; //P6口初始设置为FF
RED_L; RED_IN; }
//************************************************************************* // 遥控器键值赋功能值子程序
//************************************************************************* void Key_Icode(void) {
switch(key_code[2]) //第3个字节是数据,第4个字节是反码 { //为了更稳定,可以加上第4个字节数据的判断
case KEY_0:KEY_VAL=0;break; case KEY_1:KEY_VAL=1;break; case KEY_2:KEY_VAL=2;break; case KEY_3:KEY_VAL=3;break; case KEY_4:KEY_VAL=4;break; case KEY_5:KEY_VAL=5;break; case KEY_6:KEY_VAL=6;break; case KEY_7:KEY_VAL=7;break; case KEY_8:KEY_VAL=8;break; case KEY_9:KEY_VAL=9;break; default:KEY_VAL=10;break; } }
//************************************************************************* // 74HC573控制数码管动态扫描键值显示函数
//************************************************************************* void Display_Key1(uchar num) {
uchar i,j;
j=0x01; //此数据用来控制位选 for(i=0;i<8;i++) {
DCTR1; //控制数码管段数据的74HC573的LE管脚置高 WCTR1; //控制数码管位的74HC573的LE管脚置高 DATAPORT=~j; //设置要显示的位,也就是哪一个数码管亮 WCTR0; //锁存位数据,下面送上段数据以后,就显示出来了
DATAPORT=table[num]; //送要显示的数据,这里是键值
DCTR0; //锁存段数据,数码管亮一个时间片刻 j=j<<1; //移位,准备进行下一位的显示
delay_us(500); //显示一个时间片刻,会影响亮度和闪烁性 } }
//************************************************************************* // 74HC573控制数码管动态扫描显示函数,显示采集到的数据
//*************************************************************************
void Display_Key(uint data_KEY) { //system_init();
DCTR1; WCTR1; DATAPORT=0x00; WCTR0;
DATAPORT=table[data_KEY]; DCTR0;
delay_ms(1); }
//************************************************************************* // 遥控器解码子程序
//*************************************************************************
void Red_Code() {
uchar i,j,k = 0;
for(i = 0;i < 19;i++) {
delay_us(400); //延时400us
if(RED_R) //9ms内有高电平,则判断为干扰,退出处理程序 { return; } }
while(!RED_R); //等待9ms低电平过去
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库MSP430x14x系列单片机程序实例(10)在线全文阅读。
相关推荐: