标题:
单片机直接驱动40-IO驱动段码LCD_6个8
[打印本页]
作者:
pandabentobe
时间:
2018-9-5 15:12
标题:
单片机直接驱动40-IO驱动段码LCD_6个8
IO直接驱动LCD
0.jpg
(94.55 KB, 下载次数: 89)
下载附件
2018-9-14 03:37 上传
单片机源程序如下:
#include <intrins.h>
#include "config.h"
#include "timer.h"
#include "LCD_IO16.h"
/************* 功能说明 **************
用STC115系列测试IO直接驱动段码LCD(6个8字LCD, 1/4 Dutys, 1/3 bias)。
上电后显示一个时间(时分秒).
P3.2对地接一个开关,用来进入睡眠或唤醒.
******************************************/
/************* 本地常量声明 **************/
/************* 本地变量声明 **************/
u8 cnt_500ms;
u8 second,minute,hour;
bit B_Second; //秒信号
/************* 本地函数声明 **************/
/************* 外部函数和变量声明 *****************/
extern bit B_2ms;
/************************ 定时器配置 ****************************/
void Timer_config(void)
{
TIM_InitTypeDef TIM_InitStructure; //结构定义
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
TIM_InitStructure.TIM_Polity = PolityLow; //指定中断优先级, PolityHigh,PolityLow
TIM_InitStructure.TIM_Interrupt = ENABLE; //中断是否允许, ENABLE或DISABLE
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
TIM_InitStructure.TIM_Value = 65536 - (MAIN_Fosc / 500); //初值, 节拍为500HZ
TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
Timer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2
}
/******************** 显示时间 **************************/
void LoadRTC(void)
{
LCD_load(1,hour/10);
LCD_load(2,hour%10);
LCD_load(3,minute/10);
LCD_load(4,minute%10);
LCD_load(5,second/10);
LCD_load(6,second%10);
}
//========================================================================
// 函数: void delay_ms(unsigned char ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void delay_ms(u8 ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 13000;
while(--i) ; //14T per loop
}while(--ms);
}
/******************** 主函数**************************/
void main(void)
{
Init_LCD_Buffer();
Timer_config();
EA = 1;
LCD_SET_2M; //显示时分间隔:
LCD_SET_4M; //显示分秒间隔:
LoadRTC(); //显示时间
while (1)
{
PCON |= 0x01; //为了省电, 进入空闲模式(电流大约2.5~3.0mA @5V),由Timer0 2ms唤醒退出
_nop_();
_nop_();
_nop_();
if(B_2ms) //2ms节拍到
{
B_2ms = 0;
if(++cnt_500ms >= 250) //500ms到
{
cnt_500ms = 0;
// LCD_FLASH_2M; //闪烁时分间隔:
// LCD_FLASH_4M; //闪烁分秒间隔:
B_Second = ~B_Second;
if(B_Second)
{
if(++second >= 60) //1分钟到
{
second = 0;
if(++minute >= 60) //1小时到
{
minute = 0;
if(++hour >= 24) hour = 0; //24小时到
}
}
LoadRTC(); //显示时间
}
}
if(!P32) //键按下,准备睡眠
{
LCD_CLR_2M; //显示时分间隔:
LCD_CLR_4M; //显示分秒间隔:
LCD_load(1,DIS_BLACK);
LCD_load(2,DIS_BLACK);
LCD_load(3,0);
LCD_load(4,0x0F);
LCD_load(5,0x0F);
LCD_load(6,DIS_BLACK);
while(!P32) delay_ms(10); //等待释放按键
delay_ms(50);
while(!P32) delay_ms(10); //再次等待释放按键
TR0 = 0; //关闭定时器
IE0 = 0; //外中断0标志位
EX0 = 1; //INT0 Enable
IT0 = 1; //INT0 下降沿中断
P1n_push_pull(0xff); //com和seg全部输出0
P2n_push_pull(0xff); //com和seg全部输出0
P1 = 0;
P2 = 0;
PCON |= 0x02; //Sleep
_nop_();
_nop_();
_nop_();
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
40-IO-LCD-8x6-2014-6-19.rar
(1.72 MB, 下载次数: 54)
2018-9-5 15:11 上传
点击文件名下载附件
io控制lcd
下载积分: 黑币 -5
作者:
pandabentobe
时间:
2018-9-5 15:12
请问怎么做呀,我查了许多资料,不太懂,求大神解决
作者:
mafachang
时间:
2021-1-30 21:34
应该很不错非常需要
作者:
chenglcd123
时间:
2022-8-25 14:41
LCD段码 I.O直驱
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1