STM8L 液晶数码管驱动,温度计液晶屏显示

17 篇文章 0 订阅

启动液晶驱动 stm8 支持 4com 28 seg  可以显示 28*4=112点的液晶

void LCD_Configuration(void)
{
	/* Enable RTC CLK */
	CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
	/* Choice CLK Source, HSI_Freq = 16M, RTC_Freq = 500Khz*/
	CLK_RTCClockConfig(CLK_RTCCLKSource_HSI,CLK_RTCCLKDiv_32); 

	/* Enable LCD CLK */
	CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);


	/* Frequence = 500K/(32+16)? Frame_Freq = Frequence/Duty = 60Hz */
	LCD_Init(LCD_Prescaler_32, LCD_Divider_16, LCD_Duty_1_4,
	LCD_Bias_1_3, LCD_VoltageSource_Internal);
	/* Enable PM */
	LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFF);
	LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x0F);
	LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x00);
	LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0x00);
	LCD_PortMaskConfig(LCD_PortMaskRegister_4, 0x00);
	LCD_PortMaskConfig(LCD_PortMaskRegister_5, 0x00);
	/*??LCD_Contrast_Level_7: Medium Density / High Density Maximum Voltage = 3.30V / 3.51V */
	LCD_ContrastConfig(LCD_Contrast_Level_7);
	/* No dead time */
	LCD_DeadTimeConfig(LCD_DeadTime_0);
	/*?LCD_PulseOnDuration_7: Pulse ON duration = 7/CLKprescaler */
	LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7);
	LCD_Cmd(ENABLE);

	
}

根据 lcd 布线 做位表

#define CS(com,seg)	(com*28+seg)
#define SMG(NUM)	CS(3,2+NUM*2),CS(2,2+NUM*2),CS(1,2+NUM*2),CS(0,1+NUM*2),CS(1,1+NUM*2),CS(3,1+NUM*2),CS(2,1+NUM*2)	//第一个数码管
const INT8U DispBitTab[]={
	SMG(0),
	SMG(1),
	SMG(2),
	SMG(3),
};

创建数码管对应的字符表

#define BIT0    0
#define BIT1    1
#define BIT2    2
#define BIT3    3
#define BIT4    4
#define BIT5    5
#define BIT6    6
#define BIT7    7


#define LedSeg_a  ( 1<<BIT0 )
#define LedSeg_b  ( 1<<BIT1 )
#define LedSeg_c  ( 1<<BIT2 )
#define LedSeg_d  ( 1<<BIT3 )
#define LedSeg_e  ( 1<<BIT4 )
#define LedSeg_f  ( 1<<BIT5 )
#define LedSeg_g  ( 1<<BIT6 )
#define LedSeg_h  ( 1<<BIT7 )    

#define LedPin	0

// 编码计算
#define LedChar_0 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_c |LedSeg_d |LedSeg_e |LedSeg_f )
#define LedChar_1 LedPin ^ ( LedSeg_b |LedSeg_c )
#define LedChar_2 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_d |LedSeg_e |LedSeg_g )
#define LedChar_3 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_c |LedSeg_d |LedSeg_g )
#define LedChar_4 LedPin ^ ( LedSeg_b |LedSeg_c |LedSeg_f  |LedSeg_g )
#define LedChar_5 LedPin ^ ( LedSeg_a |LedSeg_c |LedSeg_d | LedSeg_f  |LedSeg_g )
#define LedChar_6 LedPin ^ ( LedSeg_a |LedSeg_c |LedSeg_d | LedSeg_e |LedSeg_f |LedSeg_g )
#define LedChar_7 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_c )
#define LedChar_8 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_c | LedSeg_d |LedSeg_e |LedSeg_f |LedSeg_g )
#define LedChar_9 LedPin ^ ( LedSeg_a |LedSeg_b |LedSeg_c | LedSeg_d |LedSeg_f  |LedSeg_g )
const unsigned char lednumTab[]={LedChar_0,LedChar_1,LedChar_2,LedChar_3,LedChar_4,LedChar_5,LedChar_6,LedChar_7,LedChar_8,LedChar_9,0x00};

显示数码管的程序

void dis_bcd(INT8U led_id, INT8U num)			//显示子程序
{
	INT8U i,pos;
	led_id*=7;
	num=lednumTab[num];
	for(i=0;i<7;i++)
	{
		pos=DispBitTab[led_id];
		if(num&1)	
			LCD->RAM[pos/8]|=BitTab[pos%8];
		else
			LCD->RAM[pos/8]&=~BitTab[pos%8];
		++led_id;
		num>>=1;
	}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值