本帖最后由 DebugLab 于 2024-9-25 09:07 编辑
之前设计了一款 8G1K08A-SOP8 扩展开发板(v1.0),由于未考虑到该款芯片不支持硬件USB,因此对开发板设计进行优化。优化后的开发板仅保留串口通信和串口下载接口作为供电接口。此外该开发板包含一位 74HC595 共阴数码管、所有IO接口LED指示灯、串口通信接口、OLED IIC扩展接口、IIC通信接口等。
实物效果如下
3D图如下
2D图
PCB如下
原理图如下
PCB 项目详见:https://oshwhub.com/jinleili/stc8g1k08a-sop8-extension-develo
DHT11测试
OLED IIC通信测试
板载数码管秒表计时测试
代码
- #include <STC8G.H>
- #include "intrins.h"
- typedef unsigned char u8; //unsigned char 类型用 u8 表示
- typedef unsigned int u16; //unsigned int 类型用 u16表示
- typedef unsigned long int u32; //unsigned long int 类型用 u32表示
-
- sbit DS = P5^5; //串行输入SER接
- sbit ST = P3^2; //锁存时钟RCLK接
- sbit SH = P5^4; //串行输入时钟SRCLK接
- sbit COM1 = P0^0; //数码管公共端COM1接
-
- void delayms(u8 ms); //延时函数声明
- void Write595(u8 dat);
-
- u8 SEG_Code[13] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0xFF}; //数码管全灭(10),横杆-(11),数码管全亮(12)
- //u8 SEG_Code[13] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x00};//BS digital tube
- void main()
- {
- u8 i,number;
-
- P0M1 = 0x00;P0M0 = 0x00; //设置P0口为准双向口模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
- P1M1 = 0x00;P1M0 = 0x00; //设置P1口为准双向口模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
- P2M1 = 0x00;P2M0 = 0x00; //设置P2口为推挽输出模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
- P3M1 = 0x00;P3M0 = 0x00; //设置P0口为准双向口模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
- P4M1 = 0x00;P4M0 = 0x00; //设置P1口为准双向口模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
- P5M1 = 0x00;P5M0 = 0x00; //设置P2口为推挽输出模式 00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
-
- number = 0;
- while(1)
- {
- for(i = 0;i < 200;i++) //每个数字显示200*5毫秒(粗略计算1秒)
- {
- Write595(number); //显示0-9计数
- COM1 = 0; //共阴极数码管,公共端给低电平点亮
- delayms(5); //延时5毫秒
- }
- number++;
- if(number > 9) number = 0;
- }
- }
- void Write595(u8 dat) //向595发送写数据函数
- {
- u16 i;
- u8 datcode;
- datcode = SEG_Code[dat]; //十进制数转段码
- for(i = 0;i < 8;i++) //写数据
- {
- SH = 0; //拉低串行输入时钟SCLK
- DS = datcode & 0x80; //取最高位
- SH = 1; //SCKL时钟上升沿,数据存移位寄存器
- datcode <<= 1; //每次一位
- }
- ST = 0; //拉低ST时钟
- ST = 1; //ST时钟上升沿,更新输出存储器数据
- }
- //----------------Timer-----------------------------
- void delayms(u8 ms) //@24.000MHz
- {
- u8 i, j;
-
- while(ms--)
- {
- _nop_();
- i = 32;
- j = 40;
- do
- {
- while (--j);
- } while (--i);
- }
- }
复制代码
相关代码见附件。
|