历史上的今天
今天是:2025年02月11日(星期二)
2020年02月11日 | AVR单片机实现电子时钟设计
2020-02-11 来源:eefocus
#include #include #include #include #include #include #include #include #define uchar unsigned char #define uint unsigned int #define xtal 8 #define CS PA5 #define SID PA6 #define SCLK PA7 #define Set_CS() DDRA |= (1< #define MM 1 //定义 分 为1 #define SS 0 //定义 秒 为0 volatile unsigned char Time_h_m_s[3]={0,0,0}; //时间的 时 分 秒 存贮单元 volatile unsigned char flash_sign=0x00; //==================================================================== //函数声明 void Delay(uint ms); //延时子程序 void Serial_W_1byte_to_LCD(uchar RS, uchar W_data); void Serial_send_cmd(uchar send_cmd); void Serial_send_data(uchar send_data); void Write_8bits(uchar W_bits); void LCD_Init(void); void Serial_send_string_to_xy(uchar row, uchar col, uchar *p); void Display_clock1(uchar row, uchar col, uchar *time); /*============================================================= 功能: TIMER2溢出中断函数 =================================================================*/ SIGNAL(SIG_OUTPUT_COMPARE2) // _VECTOR(3) { static unsigned char half_second; if((++half_second)>=2) { if((++Time_h_m_s[SS])>=60) { Time_h_m_s[SS] = 0; if((++Time_h_m_s[MM])>=60) { Time_h_m_s[MM] = 0; if((++Time_h_m_s[HH])>=24) Time_h_m_s[HH] = 0; } } half_second = 0x00; } flash_sign &= 0x01; flash_sign ^= 0x01; //置位闪动标志位(该位为0时闪动) } /******************************************************************* 函 数 名:Port_init 入口参数:无 出口参数:无 建立日期: 修改日期: 函数作用:MCU端口初始化函数 说 明: ********************************************************************/ void Port_init(void) { DDRC = ~(1< ASSR |= (1< } /******************************************************************* 函 数 名:Serial_send_string 入口参数: *p_send_data 出口参数:无 建立日期: 修改日期: 函数作用:发送字符串子函数 说 明: ********************************************************************/ void Serial_send_string(uchar *p_send_data) { uchar *p_temp; p_temp = p_send_data; while(*p_temp != 0) { Serial_send_data(*p_temp++); } } //======================== /******************************************************************** 函 数 名:Serial_send_string_to_xy 入口参数:row,col,*p 出口参数:无 建立日期: 修改日期: 函数作用: 说 明: ********************************************************************/ void Serial_send_string_to_xy(uchar row, uchar col, uchar *p) { switch(row) { case 0:Serial_send_cmd(0x80+col); break; case 1:Serial_send_cmd(0x90+col); break; case 2:Serial_send_cmd(0x88+col); break; case 3:Serial_send_cmd(0x98+col); break; default: break; } while(*p != 0) { Serial_send_data(*p++); //写数据到RAM } } /********************************************************************/ int main(void) { PORTA = 0XFF; // DDRA = 0XFF; //PA口全部设为输出模式 Port_init(); Clr_CS(); Clr_SID(); Clr_SCLK(); LCD_Init(); Delay(10); LCD_Init(); //初始化两边是关键,否则液晶上电重起将不能显示 sei(); //开总中断 while(1) { asm("nop"); asm("nop"); Serial_send_cmd(0x30); //基本指令集,,绘图显示OFF //Serial_send_cmd(0x01); //清除显示 Serial_send_string_to_xy(0, 0, "现在时间:"); Display_clock1(1, 3,Time_h_m_s); } } /******************************************************************* 函 数 名:LCD_Init 入口参数:无 出口参数:无 建立日期: 修改日期: 函数作用:12864液晶初始化函数 说 明: ********************************************************************/ void LCD_Init(void) { uchar cmd; Delay(50); cmd=0x30; //功能设置 8位数据,基本指令 Serial_send_cmd(cmd); Delay(20); cmd=0x0C; //显示状态 ON,游标OFF,反白OFF Serial_send_cmd(cmd); //写指令 Delay(20); cmd=0x01; //清除显示 Serial_send_cmd(cmd); //写指令 Delay(20); cmd=0x02; //地址归位 Serial_send_cmd(cmd); //写指令 Delay(20); cmd=0x80; //设置DDRAM地址 Serial_send_cmd(cmd); //写指令 Delay(20); //延时 } /******************************************************************* 函 数 名:Serial_send_cmd 入口参数:cmd 出口参数:无 建立日期: 修改日期: 函数作用:写一个字节指令的到12864液晶, 说 明: ********************************************************************/ void Serial_send_cmd(uchar send_cmd) { Serial_W_1byte_to_LCD(0, send_cmd); } /******************************************************************* 函 数 名:Serial_send_data 入口参数:cmd 出口参数:无 建立日期: 修改日期: 函数作用:写一个字节数据到12864液晶, 说 明: ********************************************************************/ void Serial_send_data(uchar send_data) { Serial_W_1byte_to_LCD(1, send_data); }
上一篇:单片机AVR的主要特性和浮充特性
史海拾趣
|
我们现在需要建立一个 100个节点的无线网络, 这 100 个节点中有97个是现场的 无线数据模块,通过手机卡实现 无线上网,3个节点 是数据中心,分别接有一台 PC机(此PC机为固定IP), 然后 这97个 无线模块 分别 向一台 PC机发送数据. ...… 查看全部问答> |
|
谢谢关注! 我使用的板子是friendly arm 的micro2440a,因为要做nand boot启动,需要开发k9f2g08uom(每页2048byte,2048 block,每块64页)的驱动,目前碰到两个问题: 1,程序烧写不正确。使用sjf2440 软件烧写,然后读出,发现部分数据烧写部分不 ...… 查看全部问答> |
|
keil c 编程方面的问题 跪请好心人帮忙 100分酬谢是小 大恩难忘 我要用keil c 编一个火灾报警的程序。用的探测器是感温、气体探测器,就是检测到温度或着某种气体(像CO)超标后,蜂鸣器发出报警,LED背光、休眠指示灯闪烁。硬件有MCU,串口,键盘,锁存、地址,外扩RAM,蜂鸣器,背光、休眠指示灯,滤波电路,液 ...… 查看全部问答> |
|
我现在在写wince 下的USB摄像头驱动。开发板是S3C2410,摄像头是中星微301p.在网上看了很多资料,但是写出来的还是有问题。我已经把ZC0301P.dll,ZC0301P.reg,Platform.bib,放在了移动设备的windows下面。每次把摄像头插上去,就提示“输入此USB设 ...… 查看全部问答> |
|
我是专科的 快大三了 熟悉C语言和汇编 对系统底层和linux下的API编程比较了解 看过一个小的linux原码(0.11)的那个 想转学嵌入式但不知道怎么入手 学嵌入式要开发板的吧 那个ARM9 ...… 查看全部问答> |
|
我在main()函数里边定义了两个整开变量 unsigned int save1; unsigned int save2; 我仿真后发现svae1变了,save2也根着变,看一下地址才发现一样。 我又把两个定义拿到main外边。这时正常了,这是一件事,还有一件就是如下: for(;;) { ...… 查看全部问答> |
|
最近的一个STM32的应用需要进入低功耗,结果碰到一个问题很奇怪,流程如下: 1)通过WFI进入SLEEP模式,然后通过Systick来唤醒 2)通过调用库函数(如下)进入STOP模式,然后由外部电路通过一个外部中断引脚唤醒;唤醒后,重新初始化HSE和PLL ...… 查看全部问答> |
|
为什么485程序只能单字节传输呢?单片机经过232/485转换器接到电脑,用串口精灵调试的。大家看看有什么问题啊? #include <msp430x14x.h> void main(void) { WDTCTL=WDTPW+WDTHOLD; UCTL0 &=~SWRST; UCTL0 |=CHAR; UBR ...… 查看全部问答> |




