STM8单片机驱动TM1628的示例程序
STM8单片机驱动LED驱动芯片TM1628的示例程序,四位共阴数码管,显示“1234”,开发环境为IAR FOR STM8,程序代码如下:
#include "iostm8s105s4.h>"
#define uchar unsigned char
#define uint unsigned int
//------显示任务变量定义-------------------------------------------------------
#define DIS_STB_H() (PE_ODR|=0x20) //SPI接口PE5
#define DIS_STB_L() (PE_ODR&=0xdf) //SPI接口
#define DIS_SCK_H() (PC_ODR|=0x04) //SPI接口PC2
#define DIS_SCK_L() (PC_ODR&=0xfb) //SPI接口
#define DIS_DIO_H() (PC_ODR|=0x08) //SPI接口PC3
#define DIS_DIO_L() (PC_ODR&=0xf7) //SPI接口
uchar Display_Value[4]={0,0,0,0};
const uchar DISP_TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0 ~ 9
const uchar DISP_POSITION[4]={0xc0,0xc2,0xc4,0xc6}; //显示地址
/*********************************************
* 发送一字节数据到TM1628
*********************************************/
void TM1628_Send_Byte(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
DIS_SCK_L();
if (dat & 0x01)
{
DIS_DIO_H();
}
else
{
DIS_DIO_L();
}
dat >>= 1;
DIS_SCK_H();
}
}
/*********************************************
* 发送一字节命令到TM1628
*********************************************/
void TM1628_Send_Cmd(uchar dat)
{
uchar i;
DIS_STB_L();
for (i = 0; i < 8; i++)
{
DIS_SCK_L();
if (dat & 0x01)
{
DIS_DIO_H();
}
else
{
DIS_DIO_L();
}
dat >>= 1;
DIS_SCK_H();
}
DIS_STB_H();
DIS_DIO_H();
}
/*********************************************
* 采用固定地址模式发送数据
*********************************************/
void Display_OneByte(uchar dat , uchar addr)
{
TM1628_Send_Cmd(0x03);//显示模式是7位10段
TM1628_Send_Cmd(0x44);//写数据到显示寄存器,固定地址模式
DIS_STB_L();
TM1628_Send_Byte(addr);//显示地址 STB下降沿时,默认第一个数据是命令
TM1628_Send_Byte(dat); //数据
DIS_STB_H();
TM1628_Send_Cmd(0x8f);//显示亮度设置,最亮
}
/*********************************************
* 更新需显示内容
*********************************************/
void Updata_Display(uint indata)
{
Display_Value[0] = DISP_TAB[indata%10];
Display_Value[1] = DISP_TAB[(indata/10)%10];
Display_Value[2] = DISP_TAB[(indata/100)%10];
Display_Value[3] = DISP_TAB[indata/1000];
}
/*********************************************
* 将数据发送给四位数码管
*********************************************/
void Display(void)
{
uchar num;
for(num=0;num<4;num++)
{
Display_OneByte(Display_Value[num] , DISP_POSITION[num]);
}
}
/**********************************************************
* 初始化
**********************************************************/
void Display_Init()
{
PC_DDR |= 0x0c; // 配置PC端口的方向寄存器PC2/PC3输出
PC_CR1 |= 0x0c; // 设置PC2/PC3为推挽输出
PC_CR2 &= 0xf3;
PE_DDR |= 0x20; // 配置PE端口的方向寄存器PE5输出
PE_CR1 |= 0x20; // 设置PE5为推挽输出
PE_CR2 &= 0xdf;
DIS_STB_H();
DIS_DIO_L();
DIS_SCK_L();
}
void CLK_Init(void)
{
CLK_ECKR=0x03;//外部时钟寄存器 外部时钟准备就绪,外部时钟开
CLK_SWCR=0x02;//切换控制寄存器 使能切换机制
CLK_SWR=0xB4;//主时钟切换寄存器 选择HSE为主时钟源
while (!(CLK_SWCR & 0x08));
//Wait for switch done 该语句如果没有则不能切
//换成功,在仿真时使用内部时钟,停止仿真时,切换到外部时钟,但重新上电或复位后
//又回到内部时钟状态(Debug模式)
CLK_CSSR=0x01;//时钟安全系统寄存器
}
void Delay_ms( uint ms )
{
uint i,j;
for( j=0; j<ms; j++ )
{
for( i=0; i<1000; i++ )
{;}
}
}
void main( void )
{
Delay_ms(200);
CLK_Init();
Display_Init();
Updata_Display(1234); //四位数码管显示1234
Display();
while(1)
{
}
}
STM8单片机驱动TM1628的示例程序相关推荐
- 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序
51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...
- 51单片机驱动1602液晶显示器c程序---万年历
/*该程序只需更改RW,RS E对应的引脚即可正常使用*/ #include <STC89C5xRC.H> #define LCD1602_RW P36//定义引脚 #define L ...
- 定时器驱动数码管c语言程序,74hc595驱动数码管时间程序
74hc595驱动数码管时间程序 这里是电路图: 下面是51单片机驱动74hc595芯片的程序: #include //包含51单片机的头文件 # ...
- 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序
51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序 Proteus仿真效果 注意点击运行仿真后,图像刷新出来比较慢. 示例主程序 #include "REG51.h& ...
- STM8单片机定时器驱动的深度解析
上一节给大家介绍了基于标准库STM8单片机GPIO的驱动,本节课主要给大家介绍一下STM8定时器的驱动. 我们先打开STM8L10x单片机的规格书,简单的了解一下STM8L10X单片机的定时器功能. ...
- STM8单片机GPIO口的驱动深度解析
上一节给大家介绍了STM8标准库的移植,本节课开始学习我们单片机的外设的驱动,单片机基本的外设资料包括GPIO.外部中断.定时器.串口等,本节先给大家介绍一下STM8单片机的GPIO口. 我们先不介绍 ...
- 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序
原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...
- STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)
STC单片机驱动1.8'TFT SPI屏幕示例模板(含资料包) 驱动演示 STC单片机采用的是: STC12C5A60S2,采用的自制开发板:<[开源]STC12C5A60S2开发板> 1 ...
- STC单片机驱动BLDC无刷直流电机(无HALL)官方示例
STC单片机驱动BLDC无刷直流电机(无HALL)官方示例 示例代码在STC8系列文档第20章里面:http://www.stcmcudata.com/STC8F-DATASHEET/STC8H.pd ...
最新文章
- java getservername_Tomcat:getHeader(“主机”)与getServerName()
- 在家搭建大数据分布式计算环境!
- 轻松与外来客户进行REST通信
- JAVA进阶教学之(StringBuider进行字符串拼接)
- 剑指Offer面试题:30.第一个只出现一次的字符
- 谷歌中国开发者大会,感悟,激动
- tensorflow基础(2)-tf.argmax和axis
- gitlab和github一起使用
- Atitit 歌曲年份抓取的nlp ai项目 原理通过百度搜索,抓取第一页数据,正则数字,过滤年份。。 显示格式。。歌曲,年份,年份周围前后40字符,方便核对 通过百科抓取比较准确 红尘情歌
- 4.测试用例模板(p2p)
- 写给初学者:电气制图规范和图纸识读方法——第四期
- Angular Compile Error NG6002
- python支持复数类型以下说法错误的是_关于Python的数字类型,以下选项中描述错误的是...
- Java零基础学习-每日单词(日更)
- 第五篇 应用Java
- HeadFirst设计模式之代理模式
- 计算机网络密码凭据,电脑无法上网时总是提示需要输入网络密码如何解决
- 正则设置首字母大、小写
- mysql (1205, 'Lock wait timeout exceeded; try restarting transaction')
- win+D无法回到桌面